很抱歉,长标题问题并不知道如何正确地提出我的问题。
所以这就是问题,我得到了一个存储对象的数组,在这些对象中还有另一个带有键标签的数组,这是一个充满标签的数组。
对象:
var arr = new Array;
arr[0] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["offline", "facebook"],
"comments" : []
};
arr[1] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["school", "online"],
"comments" : []
};
arr[2] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["school", "offline"],
"comments" : []
};
[0],[1]索引respresent和ID,但这里并不重要。
问题是当我尝试过滤它时(我知道它只是尝试过滤arr [0] atm但我会写一个循环所以它遍历所有索引):
var toFind = "offline";
var filtered = arr[0].filter(function(el) {
return el.tags === toFind;
});
console.log(filtered);
它说arr [0] .filter不是一个函数,但不知道为什么它认为arr [0]应该作为一个函数考虑。
当我删除[0]时,它会返回一个空白数组......
所以我的问题是如何让.filter函数根据tags数组中的标记返回完整的对象。因此,如果我搜索标签" school"它给出了arr [1]和arr [2],完整的对象。
希望我的问题非常明确,并且我提供了足够的信息。如果你们需要更多信息,请随时向我询问。或者如果你想让我澄清事情,请问:)
希望你们能帮助我!
答案 0 :(得分:0)
你应该使用:
var arr = new Array;
arr[0] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["offline", "facebook"],
"comments" : []
};
var toFind = "offline";
//I'm filtering on arr[0].tags directly !!
var filtered = arr[0].tags.filter(function(el) {
return el === toFind;
});
console.log(filtered);
答案 1 :(得分:0)
如前所述,arr [0]指向一个没有过滤方法的对象。你需要在数组本身上调用过滤器
var tagToFind = "school";
var arr = new Array;
arr[0] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["offline", "facebook"],
"comments" : []
};
arr[1] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["school", "online"],
"comments" : []
};
arr[2] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["school", "offline"],
"comments" : []
};
var filtered = arr.filter(function(item){
return item.tags && //to account for undefined tags properties
item.tags.includes(tagToFind); //if you're supporting IE you will need to look and check each element instead
});
console.log(filtered);
答案 2 :(得分:0)
如果我正确地解释你的问题,你似乎想要一些类似
的内容arr.forEach((a) => {
if (a["tags"].includes(toFind))
console.log(a);
});
这将循环遍历arr
的每个元素,并检查tags
数组是否包含toFind
(如果有,则打印出对象)。
答案 3 :(得分:0)
如果你想为整个阵列做这个,那么试试这个
var arr = new Array;
arr[0] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["offline", "facebook"],
"comments" : []
};
arr[1] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["school", "online"],
"comments" : []
};
arr[2] = {
"like": 0,
"dislike": 0,
"answer": "body",
"tags" : ["school", "offline"],
"comments" : []
};
var filtered = arr.filter(function(el) {
return el.tags.find(function (entity){
return entity===toFind;
});
});
console.log(filtered);