Javascript tp如何防止阵列中的重复
如下面发布的代码所示,数组arr将在每次调用函数func时包含obj.name和obj.text。 我想知道的是,javascript中是否有一种推荐的方法来防止数组多次使用相同的obj.name和obj.text 注意:函数func包含对象obj,但实际上它有两个以上的属性 请让我知道javascript中防止数组重复条目的推荐方法 代码Javascript tp如何防止阵列中的重复,javascript,node.js,Javascript,Node.js,如下面发布的代码所示,数组arr将在每次调用函数func时包含obj.name和obj.text。 我想知道的是,javascript中是否有一种推荐的方法来防止数组多次使用相同的obj.name和obj.text 注意:函数func包含对象obj,但实际上它有两个以上的属性 请让我知道javascript中防止数组重复条目的推荐方法 代码 func(obj) { obj.name = name; obj.text = text; arr.push(obj); } 为避
func(obj) {
obj.name = name;
obj.text = text;
arr.push(obj);
}
为避免名称重复,请将arr用作对象(最好也更改其名称;),并将名称用作键:
func(obj) {
obj.name = name;
obj.text = text;
arr[name] = obj;
}
如果要避免名称和文本重复,可以使用相同的方法:
func(obj) {
obj.name = name;
obj.text = text;
arr[name] = arr[name] || {};
arr[name][text] = obj;
}
编辑:在这种情况下,arr将是一个对象而不是数组。您可以使用遍历其属性。您可以检查数组中与现有对象的
名称
和文本
匹配的对象。你可以用
arr.find(item=>item.name==obj.name&&item.text==obj.text)
如果arr
数组else未定义的中已经存在具有名称
和文本
值的对象,它将返回一个对象
func(obj) {
obj.name = name;
obj.text = text;
var existingItem = arr.find(item => item.name === obj.name && item.text === obj.text);
if(!existingItem){
arr.push(obj);
}
}
也许在新的答案中你会得到最好的建议,但你能做的是
func(obj) {
obj.name = name;
obj.text = text;
var index = arr.findIndex(item => item.name === obj.name);
if (index !== -1) {
arr.splice(index, 1);
}
arr.push(obj);
}
复制什么?只有名字、名字和文字?名字和文字从哪里来?是否确实要修改obj
?请使用Map
对象,而不是将要避免重复的项作为键的数组。添加完所有项目后,如果需要,您可以从映射对象获取数组。只有整数可以用作访问元素的数组键。如果使用字符串,数组将获得一个具有该值的属性,但该属性不会包含在数组的元素中。确实如此,它将是一个具有属性的对象,但仍然可以避免重复。当将数组作为对象使用时,为什么要使用它呢?这完全令人困惑!您的最后一行生成了一个错误,因为arr[name]
未定义。谢谢您,更改了代码,使其正常工作。还精确到我们将使用对象而不是数组。我相信这里的重点是删除重复项,这样的对象在我看来更好。