Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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中数组元素与Json响应的比较_Javascript_Arrays_Json - Fatal编程技术网

Javascript中数组元素与Json响应的比较

Javascript中数组元素与Json响应的比较,javascript,arrays,json,Javascript,Arrays,Json,我有一个Json响应,如下所示 [ { "name": "name1", "id": "1" }, { "name": "name2", "id": "2" }, { "name": "name4", "id": "4" }, { "name": "name5", "id": "5" } ] 我有另一个名为“a”的数组,它只有id[1,2,3,4,5]。现在,我必须将数组中的每个元素与jso

我有一个Json响应,如下所示

[
  {
    "name": "name1",
    "id": "1"
  },
  {
    "name": "name2",
    "id": "2"
  },
  {
    "name": "name4",
    "id": "4"
  },
  {
    "name": "name5",
    "id": "5"    
  }
]
我有另一个名为“a”的数组,它只有id[1,2,3,4,5]。现在,我必须将数组中的每个元素与json响应对象id进行比较。例如,数组“a”的第一个元素存在于json响应对象中,然后应检索其各自的名称,并将其存储在另一个名为“b”->[name1]的新数组中。数组“a”的第二个元素存在于json响应对象中,则应检索其各自的名称并将其追加到“b”数组->[name1,name2]。数组“a”的第三个元素不存在于json响应对象中,因此没有名称。在这种情况下,对于id->[name1,name2,0],应该在b数组中显示“0”,而不是名称。数组“a”的第四个元素存在于json响应对象中,那么应该检索其各自的名称并将其追加到b数组->[name1,name2,0,name4]。数组“a”的第五个元素存在于json响应对象中,那么应该检索其各自的名称并将其追加到b数组->[name1,name2,0,name4,name5]

我试图通过以下代码实现这一点。但是我得到的不是[name1,name2,0,name4,name5],而是[name1,name2,name4,name5,0]

for (var i = 0; i < a.length; i++) {
    if (a.includes(jsonResponse[i].id)) {
        b.push(jsonResponse[i].name);
    }
    else{
       b.push("0"); 
   }
}
for(变量i=0;i
您需要在整个
jsonResponse
数组中搜索
b
的每个元素,而不仅仅是测试
jsonResponse
的当前索引

使用
.find()
查找具有您要查找的ID的元素

让jsonResponse=[{
“名称”:“名称1”,
“id”:“1”
},
{
“名称”:“名称2”,
“id”:“2”
},
{
“名称”:“名称4”,
“id”:“4”
},
{
“名称”:“名称5”,
“id”:“5”
}
];
设a=[1,2,3,4,5];
设b=a.map(id=>{
let found=jsonResponse.find(u=>u.id==id);
返回找到?找到。名称:“0”;
});

控制台日志(b)
您可以使用
Map
collection在映射元素时访问所需元素时,使
O(1)

let mapResponse = new Map(jsonResponse.map(s=> [+s.id, s.name]));
const result = a.map(id => mapResponse.get(id) || '0')
例如:

让jsonResponse=[
{
“名称”:“名称1”,
“id”:“1”
},
{
“名称”:“名称2”,
“id”:“2”
},
{
“名称”:“名称4”,
“id”:“4”
},
{
“名称”:“名称5”,
“id”:“5”
}
];
设a=[1,2,3,4,5];
让mapResponse=newmap(jsonResponse.Map(s=>[+s.id,s.name]);
const result=a.map(id=>mapsresponse.get(id)| |“0”)

控制台日志(结果)
您在
a
的索引上循环,但将其用作
jsonResponse
中的索引。是的。还有别的办法吗?