简体   繁体   English

检查javascript / typescript中两个对象数组中的相同名称?

[英]check same names in two array of objects in javascript /typescript?

I have two array of objects我有两个对象数组

array1=[{name:'apple',deleted:false},
       {name:'road',deleted:false},
       {name:'tree',deleted:false}]

and

array2=[{name:'apple'},
       {name:'tree'}]

what I want is : if array1 object has same names in array2, I want to change value of "deleted" in array1 to true .我想要的是:如果 array1 对象在 array2 中具有相同的名称,我想将 array1 中“已删除”的值更改为 true 。 eg : {name:'apple',deleted:true}例如: {name:'apple',deleted:true}

expecting resulting array1:期待结果数组1:

array1=[{name:'apple',deleted:true},
           {name:'road',deleted:false},
           {name:'tree',deleted:true}]

here you can see , only apple, tree has deleted=true , because array2 has only 2 names : apple and tree .在这里您可以看到,只有apple, treedeleted=true ,因为array2只有 2 个名称: appletree

you can :你可以 :

  • loop on array1 with forEach for sample使用 forEach 在 array1 上循环获取样本

  • use some function to set deleted boolean使用一些函数来设置删除的布尔值

    deleted = array2.some(elem2 => elem2.name === elem.name) 

 const array1 = [{ name: 'apple', deleted: false }, { name: 'road', deleted: false }, { name: 'tree', deleted: false } ] const array2 = [{ name: 'apple' }, { name: 'tree' } ]; array1.forEach(elem => elem.deleted = array2.some(elem2 => elem2.name === elem.name)); console.log(array1);

Use forEach() to loop array1 and use include() to set value of deleted使用forEach()循环 array1 并使用include()设置删除的值

 const array1=[{name:'apple',deleted:false}, {name:'road',deleted:false}, {name:'tree',deleted:false}] const array2=[{name:'apple'}, {name:'tree'}] array1.forEach(el=> el.deleted = array2.map(foo => foo.name).includes(el.name)) console.log(array1)

  1. Create a Set of deletedItems .创建一deletedItems

  2. Map over the items and update the deleted property using the Set . 映射项目并使用Set更新deleted的属性。

 const items = [{ name: "apple", deleted: false }, { name: "road", deleted: false }, { name: "tree", deleted: false }], deletedItems = [{ name: "apple" }, { name: "tree" }], deletedSet = new Set(deletedItems.map((d) => d.name)), updatedItems = items.map((i) => (deletedSet.has(i.name) ? { ...i, deleted: true } : i)); console.log(updatedItems);

You can use Array.map and Array.find :您可以使用Array.mapArray.find

 let array1=[ {name:'apple',deleted:false}, {name:'road',deleted:false}, {name:'tree',deleted:false} ]; let array2=[ {name:'apple'}, {name:'tree'} ]; array1 = array1.map(item1 => array2.find(item2 => item1.name == item2.name) ? {...item1, deleted:true} : item1); console.log(array1)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM