js 一个数组和一个数组对象,获取两个之间不同的元素和相同的元素?

  • 25
广西南宁市
var value = '';
var list = ['a', 'b', 'c', 'e'];

var list2 = [{ id: 1, name: 'a' }, { id: 1, name: 'c' }, { id: 1, name: 'd' }];

想要的效果是

var list3 = [{ id: 1, name: 'a', checked: true }, { id: 1, name: 'c', checked: true }, { id: 1, name: 'd' }]
value = 'b,e';

把list2中与list的相同的对象多加一个元素checked, 然后把不相同的用字符串打印出来.

回复
阅读 731
3 个回答
前往火星中
  • 529
广东
var value = '';
var list = ['a','b','c','e'];
var list2 = [{id:1,name:'a'},{id:1,name:'c'},{id:1,name:'d'}];

let idxArr = [];
let list3 = JSON.parse(JSON.stringify(list2));;
list3.map(item=>{
    let idx = list.indexOf(item.name);
    if(idx > -1){
        idxArr.push(idx);
        item.checked = true;
    }
    return item;
});

value = list.filter((item,idx)=>idxArr.indexOf(idx) < 0).join(",");
var value = list.reduce((a,b) => list2.find(v => v.name === b)?a:[...a,b],[]);
var list3 = list2.reduce((a, b) => [...a, { ...b, checked: list.includes(b.name) }], []);
const list3 = list2.map((it) => list.includes(it.name) ? { ...it, checked: true } : { ...it });
const value = list.filter(name => !list3.find(it => it.name === name));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏