js Array reduce 处理数据

如何使用reduce实现以下数据
变量:
const a = [1,2,3];
const b = [{"key":1,"name":1},{"key":3,"name":3}];
要求:
根据a的元素索引b下的对象的key,如果没有,往b里添加一个对象({"key":a元素,"name":a元素}),如何使用reduce实现?

阅读 1.5k
2 个回答

// 这个没必要用reduce,既然都这么问了,就这么答

const a = [1,2,3];
const b = [{"key":1,"name":1},{"key":3,"name":3}];

var arr = demo(b, a);

// => [{"key":1,"name":1},{"key":3,"name":3},{"key":2,"name":2}]
console.log(JSON.stringify(arr));

/**
 * @param {Array} list 数据
 * @param {Array} checkList 检测key列表
 * 
 * @return {Array}
 */
function demo (list, checkList) {
  return checkList.reduce((res, key) => {
    if(!res.some(item => item.key === key)) {
      res.push({
        key: key,
        name: key
      })
    }
    return res;
  }, list);
}
// 遍历做逻辑很简单
a.map( num => b.filter( item => item.key === num )[0] || {key:num, name: num})

// reduce 这个就比价麻爪了 ...
// 反正我 reduce 用得不 6  ...
a.reduce(function(arr, num, index){
    arr.push(b.filter(item => item.key === num)[0] || {key:num, name: num})
    return arr
}, [])
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题