【发布时间】:2017-10-07 05:13:07
【问题描述】:
我正在努力从一组对象中删除欺骗。我有一个数组,storedItems:
var storedItems = [
{text: "1", checked: false },
{text: "2", checked: false },
{text: "3", checked: false },
{text: "string", checked: false }
]
等等。文本值是字符串或数字字符串。我可以在散列或 uniqueVals 中识别唯一文本值...
filterDupes(storedItems);
function filterDupes(input) {
var hash = {};
var uniqueVals = [];
input.forEach(obj => {
hash[obj.text] = true;
})
var uniqueVals = Object.keys(hash); // Array
return input.filter(function(obj, ix, arr) {
uniqueVals.indexOf(obj.text) !== -1; // NOPE
}) // .filter
} // filterDupes
...这是如何将哈希键或 uniqueVals 与输入数组对象进行比较,即,我到底需要什么(没有 for 循环或另一个 forEach?)来返回过滤后的数组,这让我大吃一惊我的头靠在墙上,试图找到一些版本的 return hash[obj.text] == obj.text;或返回 (hash.key === obj.text)
【问题讨论】:
-
你可能想使用 Set object developer.mozilla.org/en/docs/Web/JavaScript/Reference/… 而不是运行 forEach 循环然后 Object.keys 方法。
-
你展示的代码现在做了什么?它不工作吗?如果它不起作用,它是通过什么方式不起作用的?
-
@Yanaro 回复:设置对象,是的,我刚刚知道,谢谢。
-
@torazaburo 我展示的代码返回一个空数组。
-
你必须从你的过滤函数中返回一些东西。
标签: javascript arrays filter duplicates