我在firebase中有这个烦人的难题,我需要将一个返回给我的对象与一个数组进行比较
我需要这个方法填写
const removeAlreadySeenUsersFromQueue = (newUsers, likedUsers) => {
}
基本上newUsers是一个对象数组。每个对象都有一个我感兴趣的ID。
然后,LikeUsers将作为对象对象的数组返回。看起来像这样:[{object1: {}, object2: {}, object3: {}]
基本上是一个长度为1的数组。在每个对象中都有一个我感兴趣的id键。我基本上想比较这两个并返回一个数组,当某人的id只在newUsers中出现而不是在preferUsers中。我认为我需要潜在地使用object.keys()
,但目前我无法正常使用
以下示例:
[{id: 4444}, {id: 5555}, {id: 6666}]
[{object1: {id: 4444}, object2: {id: 55555}, object3: {id: 121241}}]
在比较这两个之后,我只希望{id: 6666}
返回给我。
答案 0 :(得分:0)
您可以使用reduce
获取ID,然后使用filter
和some
功能。
reduce可能会返回重复的元素[666, 555, 666, 777]
,但这超出了范围,因为您的示例没有重复的ID。
var source = [{ id: 4444 }, { id: 5555 }, { id: 6666 }, { id: 123456 }];
var content = [{ object1: { id: 4444 }, object2: { id: 5555 }, object3: { id: 121241 }}];
var ids = content.reduce((acc, curr) => [...acc, ...Object.keys(curr).map((k) => curr[k].id)] , []);
var result = source.filter((e) => {
return !ids.some((c) => {
return e.id === c;
});
});
console.log(result);
答案 1 :(得分:0)
这将与所呈现的数据一起使用,我将{ id: 7777 }
添加到第一个输入,只是为了显示它处理多个匹配(可能相关也可能不相关)。
// input vars
var ar1 = [{id: 4444}, {id: 5555}, {id: 6666}, {id: 7777}];
var ar2 = [{object1: {id: 4444}, object2: {id: 5555}, object3: {id: 121241}}];
// output
var ar3 = ar1.filter(function(o) {
// assume we're adding the element from ar1
var result = true;
// if we find the element from ar1 in ar2 then we won't add it
Object.keys(ar2[0]).forEach(function(key) { if (ar2[0][key].id == o.id) result = false; });
// complete the filter function, adding elements not found
return result;
});
// log the output
console.log(ar3);
答案 2 :(得分:-1)
你说你的阵列长度为1?你的意思是:[{}]
?
将其更改为[{}, {}, {}]
并使用for (element of array)
- for of
循环对其进行迭代。或者如果它必须是一个保存它们的对象,则通过for in
循环遍历它。我的意思是,for (element in array[0])
。
EDIT 现在我看到了你的例子,这是一个片段:
const firstArray = [{id: 4444}, {id: 5555}, {id: 6666}];
const secondArray = [{object1: {id: 4444}, object2: {id: 55555}, object3: {id: 121241}}];
for (let object in secondArray[0]) {
if (firstArray.some(el => el.id === secondArray[0][object].id)} {
//do something
}
}