我有两个数组:
var arr = [
{ id: 2, username: 'bill'},
{ id: 3, username: 'ted' }];
var b = ["ted", "bill", "john"];
我如何获得一个像这样的数组:
var finalArr = [{id: 2, username: 'bill'},{id:3, username: 'ted'}. {id:0, username: 'john'}]
如果数组b
中的用户存在于arr
数组中,则要添加id,如果不是id,则添加0。
我尝试了类似的方法,但是没有用
var arr = [{
id: 2,
username: 'bill'
},
{
id: 3,
username: 'ted'
}
];
var b = ["ted", "bill", "john"];
var finalArr = [];
function userExists(username) {
var a = arr.some(item => {
if (item.username === username) {
finalArr.push({
username,
id: item.id
})
} else {
finalArr.push({
username,
id: 0
})
}
})
}
b.forEach(el => {
userExists(el)
})
console.log(finalArr)
答案 0 :(得分:4)
使用map
在b
中循环。使用find
检查username
中是否存在arr
。如果是,则返回对象。否则,用id: 0
var arr = [
{ id: 2, username: 'bill'},
{ id: 3, username: 'ted' }];
var b = ["ted", "bill", "john"];
const output = b.map(username => {
const found = arr.find(a => a.username === username);
return found || { username, id: 0 }
})
console.log(output)
答案 1 :(得分:1)
您可以使用map和find来构建新的数组,如
var arr = [{
id: 2,
username: 'bill'
},
{
id: 3,
username: 'ted'
}
];
var b = ["ted", "bill", "john"];
const finalArr = b.map(username => {
const find = arr.find(o => o.username === username);
return find ? find : { id: 0, username }
})
console.log(finalArr)
答案 2 :(得分:1)
您可以选择Set
并通过查看设置进行过滤并删除访问过的项目。最后,缺少物品。
此解决方案代表给定数据的顺序,并按names
数组的顺序添加丢失的对象。
var data = [{ id: 42, username: 'foo' }, { id: 2, username: 'bill' }, { id: 3, username: 'ted' }],
names = ["ted", "bill", "john"],
missing = new Set(names),
result = data
.filter(({ username }) => missing.delete(username))
.concat(Array.from(missing, username => ({ id: 0, username })));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:0)
您可以使用 reduce 方法做到这一点。
b.reduce((result, elm) => {
const userObj = arr.find((a) => a.username === elm);
if(userObj) {
result.push(userObj)
} else {
result.push({
id: 0,
username: elm
});
}
return result;
}, []);
检查https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce,了解有关reduce的更多详细信息。
答案 4 :(得分:0)
您可以创建一个虚拟数组以存储结果,然后使用find
查找现有数组。如果找不到,请创建一个虚拟对象,然后将其推入数组。
var arr = [
{ id: 2, username: 'bill'},
{ id: 3, username: 'ted' }];
var b = ["ted", "bill", "john"];
myArr = [];
b.forEach(function(element) {
var el=arr.find(x => x.username === element);
if(el){
myArr.push(el);
}else{
var dummy={};
dummy.id=0;
dummy.username=element;
myArr.push(dummy);
}
});
console.log(myArr);