Javascript 比较两个具有键的对象数组,如果未找到,则将其添加到数组中
我希望将Javascript 比较两个具有键的对象数组,如果未找到,则将其添加到数组中,javascript,ecmascript-6,Javascript,Ecmascript 6,我希望将array1的id与array2的id进行比较,如果array1中缺少任何对象,则将其添加到该数组中。你能建议我怎么做吗 谢谢1-节省第一个数组的长度 2-遍历第二个数组项 3-如果id不存在或其索引大于数组长度,则将项推送到第一个数组 let array1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}],array2=[{id:1,高度:'},{id:1,高度:''},{id:2,高度:''},{id:2,高度:''
array1
的id与array2
的id进行比较,如果array1
中缺少任何对象,则将其添加到该数组中。你能建议我怎么做吗
谢谢1-节省第一个数组的长度 2-遍历第二个数组项 3-如果id不存在或其索引大于数组长度,则将项推送到第一个数组
let array1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}],array2=[{id:1,高度:'},{id:1,高度:''},{id:2,高度:''},{id:2,高度:''},{id:3,高度:''},{id:4,高度:'''},{,
阵列长度=阵列长度;
数组2.forEach(函数(itm){
let index=array1.findIndex(函数(it){
返回it.id==itm.id;
});
if(-1==索引| | arr1Length1-保存第一个数组的长度
2-遍历第二个数组项
3-如果id不存在或其索引大于数组长度,则将项推送到第一个数组
let array1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}],array2=[{id:1,高度:'},{id:1,高度:''},{id:2,高度:''},{id:2,高度:''},{id:3,高度:''},{id:4,高度:'''},{,
阵列长度=阵列长度;
数组2.forEach(函数(itm){
let index=array1.findIndex(函数(it){
返回it.id==itm.id;
});
如果(-1==索引| | arr1长度
使用类似于Array.prototype.reduce()
或
从array2
中筛选出不在集合中的条目
将array1
与筛选结果连接起来
const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
//步骤#1
const knownIds=array1.reduce((set,{id})=>set.add(id),new set())
//步骤2和3
const resultArray=array1.concat(array2.filter(({id})=>!knownIds.has(id)))
控制台信息(resultArray)
使用类似于Array.prototype.reduce()
或
从array2
中筛选出不在集合中的条目
将array1
与筛选结果连接起来
const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
//步骤#1
const knownIds=array1.reduce((set,{id})=>set.add(id),new set())
//步骤2和3
const resultArray=array1.concat(array2.filter(({id})=>!knownIds.has(id)))
console.info(resultArray)
我建议使用一组array1
的键进行快速查找。请注意,这会改变array1
:
const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
const id=新集合(array1.map(e=>e.id));
array2.forEach(e=>{
如果(!id.has(e.id)){
阵列1.推送(e);
}
});
console.log(array1);
我建议使用一组array1
的键进行快速查找。请注意,这会改变array1
:
const数组1=[{id:1,高度:178},{id:1,高度:176},{id:2,高度:168},{id:2,高度:164}]
常量数组2=[{id:1,高度:'},{id:1,高度:'},{id:2,高度:'},{id:2,高度:'},{id:3,高度:'},{id:3,高度:'},{id:4,高度:'},{id:4,高度:''}]
const id=新集合(array1.map(e=>e.id));
array2.forEach(e=>{
如果(!id.has(e.id)){
阵列1.推送(e);
}
});
控制台日志(array1)
您想增量添加还是一次添加全部?我只是问,因为只要您添加一个,比如说id:3
,那么array1
将包含该id
,这样您就不会一次添加更多可能的重复项,因为我将映射此resultArray以呈现表。我希望得到结果数组数组2中所有缺少的键,即使它们是重复的。你想增量添加它们还是一次添加所有键?我只是问,因为只要你添加一个,比如说id:3
,那么array1
将包含该id
,这样你就不会一次添加更多可能的重复项,因为我要映射这个结果y来渲染表。我希望得到数组2中所有缺失键的结果数组,即使它们是重复的。很好!我感觉有一种比使用reduce()更好的方法来构建集
Great!!这就是我要找的。非常适合我。非常感谢!我感觉有一种比使用reduce()
更好的方法来构建集。
Great!!这就是我要找的。非常适合我。非常感谢
array1 = [
{id: 1, height: 178}, {id: 1, height: 176},
{id: 2, height: 168},{id: 2, height: 164}
]
array2 = [
{id: 1, height: ''},{id: 1, height: ''},
{id: 2, height: ''},{id: 2, height: ''},
{id: 3, height: ''}, {id: 3, height: ''},
{id: 4, height: ''}, {id: 4, height: ''}
]
resultArray = [
{id: 1, height: 178},{id: 1, height: 176},
{id: 2, height: 168},{id: 2, height: 164},
{id: 3, height:''}, {id: 3, height: ''},
{id: 4, height: ''}, {id: 4, height: ''}
]