1、输入数组,输出对象(数组中相同的累加) function countedNames(names){ const accumulator = {}; names.forEach(val=>{ console.log(val,accumulator[val]) if (accumulator[val]) { accumulator[val] += 1; } else { accumulator[val] = 1; }
}) return accumulator
}
const names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice','Bob','Bob'];
const output = countedNames(names);
console.log(111,output)
2、输入对象,输出数组(对象中相同key的累加)
function accumulateValues(arr) {
// 使用一个对象来记录每个key的累加值
const accumulator = {};
// 遍历数组进行累加
for (let i = 0; i < arr.length; i++) {
//拿到数组里每个对象
const obj = arr[i];
//拿到数组里每个对象的key(此时是一个数组)
const keys = Object.keys(obj);
// console.log(1,keys)
//遍历对象的key
for (let j = 0; j < keys.length; j++) {
//拿到具体对象的key
const key = keys[j];
// console.log(2,key)
//拿到具体对象的value(obj[key]=obj.key)
const value = obj[key];
// console.log(3,value)
// 如果累加器中已经有该key,则累加value值
if (accumulator.hasOwnProperty(key)) {
//累加value(accumulator之前是空对象,accumulator[key]是往对象里加键值对,同时也是对象key的value)
accumulator[key] += value;
console.log(4,accumulator[key])
}
// 否则将该key和value添加到累加器中
else {
//不累加value(将键值对key:value直接放入空数组里)
accumulator[key] = value;
}
}
}
// 根据累加结果生成新的对象数组
// const result = Object.keys(accumulator).map(key => {
// const obj = {};
// obj[key] = accumulator[key];
// console.log(88,obj)
// return obj;
// });
const result = []
// result.push(accumulator)
//遍历累加对象
Object.keys(accumulator) .forEach(key => {
// key是对象里的key值,accumulator[key]是对象的value值
// console.log(88,key,accumulator[key])
const obj = {}
obj[key] = accumulator[key];
// obj是一个对象,obj[key]是obj对象里的value值,拿到对象里&赋值的value,可直接得到整个对象
// console.log(99,obj,obj[key])
result.push(obj)
});
//函数需要出口所以需要return
//return 出去accumulator对象,输出结果是{a:2},{b:2},{c:1},如果你想要输出结果是数组,就需要return出数组
return result;
}
// 测试 const input = [{a:1},{b:1},{a:1},{c:1},{b:1}]; const output = accumulateValues(input); console.log(66,output); // 输出:[{a:2},{b:2},{c:1}] //遍历对象的方法 const pp = {a:1,b:2,c:3}; console.log(111,Reflect.ownKeys(pp),222,Object.keys(pp),333,Object.entries(pp)) 3、 const arr = [{ a: 1 }, { b: 1 }, { a: 1 }, { a: 2 }, { b: 1 }] let keyMap = {};
for (let i = 0; i < arr.length; i++) { const key = Object.keys(arr[i])[0]; const val = arr[i][key]; if (keyMap[key] === undefined) { keyMap[key] = i; } else { arr[keyMap[key]][key] += val; arr.splice(i, 1) i-- } } console.log(arr);