我有两个不同的JSON对象:
a = [{id:"1",time:"timestamp"},{id:"2",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"},{id:"5",time:"timestamp"}];
b = [{id:"1",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"}];我想根据数组a中的匹配创建一个新数组。例如,上面示例中的输出如下所示:
c = ["1","0","1","1","0"]其中1表示我们找到id的情况,0表示我们没有得到id的情况。
到目前为止,我尝试了以下方法:
c = [];
var val = JSON.parse(b);
if (val.length > 0) {
val.forEach((obj) => {
var match = a.find(({
id
}) => obj.id === id);
if (!match) {
c.push("0");
} else {
c.push("1");
}
});
}
console.log(c);有人能告诉我我做错了什么吗?
谢谢
发布于 2019-08-01 11:19:14
据我所知,你应该反过来做。如果要检查第一个列表的值是否在第二个列表中,则需要循环第一个列表,而不是第二个列表。
c = [];
var val = JSON.parse(a);
if( val.length > 0 ) {
val.forEach((obj)=>{
var match = b.find(({id}) => obj.id === id);
if(!match){
c.push("0");
}
else {
c.push("1");
}
});
}
console.log(c);发布于 2019-08-01 11:20:15
你需要在a中使用forEach,然后在b中找到一个元素。
var a = [{id:"1",time:"timestamp"},{id:"2",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"},{id:"5",time:"timestamp"}];
var b = [{id:"1",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"}];
var c = [];
var val = a;
if (val.length > 0) {
val.forEach((obj) => {
var match = b.find(({
id
}) => obj.id === id);
if (!match) {
c.push("0");
} else {
c.push("1");
}
});
}
console.log(c);
发布于 2019-08-01 11:22:00
使用简单的For循环;
a = [{id:"1",time:"timestamp"},{id:"2",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"},{id:"5",time:"timestamp"}];
b = [{id:"1",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"}];
var arr = [];
var a_keys = a.map(e => e.id);
var b_keys = b.map(e => e.id);
for(var i=0;i<a_keys.length;i++){
if(b_keys.indexOf(a_keys[i]) != -1){
arr.push('1');
}else{
arr.push('0');
}
}
console.log(arr);
a = [{id:"1",time:"timestamp"},{id:"2",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"},{id:"5",time:"timestamp"}];
b = [{id:"1",time:"timestamp"},{id:"3",time:"timestamp"},{id:"4",time:"timestamp"}];
var arr = [];
for(var i= 0; i < a.length; i++) {
for(var j= 0; j < b.length; j++) {
if(a[i].id === b[j].id){
arr.push('1');
break;
}
if((a[i].id !== b[j].id) && (j === (b.length - 1))){
arr.push('0');
}
}
}
console.log(arr);
https://stackoverflow.com/questions/57301312
复制相似问题