js代码

59 阅读2分钟

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);