Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/429.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中设置对象属性true/false,无论该id是否与另一个对象数组中的任何id匹配_Javascript_Arrays_Object_Ecmascript 6 - Fatal编程技术网

Javascript 在数组中设置对象属性true/false,无论该id是否与另一个对象数组中的任何id匹配

Javascript 在数组中设置对象属性true/false,无论该id是否与另一个对象数组中的任何id匹配,javascript,arrays,object,ecmascript-6,Javascript,Arrays,Object,Ecmascript 6,首先,这里有一个简单的片段来演示我的确切意思,以及我所做的尝试 让数组_1=[ {id:1,名字:'Peter'}, {id:2,名字:'John'}, {id:3,名字:'Andrew'}, {id:4,名字:'Patrick'}, {id:5,名字:'Brian'} ]; 设数组_2=[ {id:1,名字:'不是彼得'}, {id:80,名字:'不是约翰'}, {id:3,名字:'不是安德鲁'}, {id:40,名字:'不是帕特里克'}, {id:5,名字:'不是布莱恩'} ]; 数组_1

首先,这里有一个简单的片段来演示我的确切意思,以及我所做的尝试

让数组_1=[
{id:1,名字:'Peter'},
{id:2,名字:'John'},
{id:3,名字:'Andrew'},
{id:4,名字:'Patrick'},
{id:5,名字:'Brian'}
];
设数组_2=[
{id:1,名字:'不是彼得'},
{id:80,名字:'不是约翰'},
{id:3,名字:'不是安德鲁'},
{id:40,名字:'不是帕特里克'},
{id:5,名字:'不是布莱恩'}
];
数组_1.forEach(项_1=>{
for(设i=0;ilog('matched_array',array_1)
您可以首先使用
reduce
方法创建一个对象,然后将其用作哈希表,以检查数组2中是否存在具有相同id的元素

let array_1=[{“id”:1,“name”:“Peter”},{“id”:2,“name”:“John”},{“id”:3,“name”:“Andrew”},{“id”:4,“name”:“Patrick”},{“id”:5,“name”:“Brian”},{“id”:6,“name”:“Joe”}]
让数组2=[{“id”:1,“name”:“not Peter”},{“id”:80,“name”:“not John”},{“id”:3,“name”:“not Andrew”},{“id”:40,“name”:“not Patrick”},{“id”:5,“name”:“not Brian”}]
常量o=array_2.reduce((r,e)=>(r[e.id]=true,r),{})
const result=array_1.map(e=>({…e,matches:o[e.id]| | false}))

log(result)
您可以首先使用
reduce
方法创建一个对象,然后将其用作哈希表,以检查数组2中是否存在具有相同id的元素

let array_1=[{“id”:1,“name”:“Peter”},{“id”:2,“name”:“John”},{“id”:3,“name”:“Andrew”},{“id”:4,“name”:“Patrick”},{“id”:5,“name”:“Brian”},{“id”:6,“name”:“Joe”}]
让数组2=[{“id”:1,“name”:“not Peter”},{“id”:80,“name”:“not John”},{“id”:3,“name”:“not Andrew”},{“id”:40,“name”:“not Patrick”},{“id”:5,“name”:“not Brian”}]
常量o=array_2.reduce((r,e)=>(r[e.id]=true,r),{})
const result=array_1.map(e=>({…e,matches:o[e.id]| | false}))

console.log(result)
我会首先收集a集中
数组_2
的id,该集合有一个O(1)查找时间,因此检查id是否在该集合中是快速的。然后迭代
数组_1
,并使用检查id是否存在于创建的集合中

让数组_1=[
{id:1,名字:'Peter'},
{id:2,名字:'John'},
{id:3,名字:'Andrew'},
{id:4,名字:'Patrick'},
{id:5,名字:'Brian'}
];
设数组_2=[
{id:1,名字:'不是彼得'},
{id:80,名字:'不是约翰'},
{id:3,名字:'不是安德鲁'},
{id:40,名字:'不是帕特里克'},
{id:5,名字:'不是布莱恩'}
];
常量数组_2_id=新集合(数组_2.map(item_2=>item_2.id));
array_1.forEach(item_1=>item_1.matches=array_2_id.has(item_1.id));

log('matched_array',array_1)
我会首先收集一个集合中的
数组2
的id,该集合有一个O(1)查找时间,因此检查id是否在该集合中很快。然后迭代
数组_1
,并使用检查id是否存在于创建的集合中

让数组_1=[
{id:1,名字:'Peter'},
{id:2,名字:'John'},
{id:3,名字:'Andrew'},
{id:4,名字:'Patrick'},
{id:5,名字:'Brian'}
];
设数组_2=[
{id:1,名字:'不是彼得'},
{id:80,名字:'不是约翰'},
{id:3,名字:'不是安德鲁'},
{id:40,名字:'不是帕特里克'},
{id:5,名字:'不是布莱恩'}
];
常量数组_2_id=新集合(数组_2.map(item_2=>item_2.id));
array_1.forEach(item_1=>item_1.matches=array_2_id.has(item_1.id));

log('matched_array',array_1)这很好用,虽然我在代码片段中确实使它们具有相同的长度,但我注意到当
array\u 1
的长度大于
array\u 2
时,这就不起作用了。再添加一个对象已引发错误。事实上,这两个数组不必共享相同的长度,虽然我不认为它会计算在内,但它显然会计算在内。你可以编辑它,使它也这样工作吗?更新了我的答案。我开始感觉不好,似乎我在挑剔,我很抱歉,但我也注意到,在尝试实现此代码后,它似乎只将
匹配
属性设置为
,如果两个对象位于相同的
索引
。交换'Peter'(1)和'John'(2)的
id
,Peter的
匹配的
属性已设置为
false
,即使
array_2
˙确实包含id为1的
对象。对我来说,它应该是完全随机的数组。我真的不知道这些小细节有多重要。更新了我的答案。现在效果很好,尽管我不知道它是如何工作的(我真的不知道代码中发生了什么),但它确实起到了作用。这很好,尽管我在代码片段中也使用了相同的长度,但是我注意到,一旦
array\u 1
的长度大于
array\u 2
的长度,这就不起作用了。再添加一个对象已引发错误。事实上,这两个数组不必共享相同的长度,虽然我不认为它会计算在内,但它显然会计算在内。你可以编辑它,使它也这样工作吗?更新了我的答案。我开始感觉不好,似乎我在挑剔,我很抱歉,但我也注意到,在尝试实现此代码后,它似乎只将
匹配
属性设置为
,如果两个对象位于相同的
索引
。交换'Peter'(1)和'John'(2)的
id
,Peter的
匹配的
属性已设置为
false
,即使
array_2
˙确实包含id为1的
对象。对我来说,它应该是完全随机的数组。我真的不知道这么小的细节有多重要。更新了我的答案。哇