Javascript中数组元素与Json响应的比较
我有一个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
[
{
"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
中的索引。是的。还有别的办法吗?