如下面发布的代码所示,每次调用函数func时,数组arr都会包含obj.name和obj.text。 我想知道的是,javascript中是否有建议的方法来防止数组多次具有相同的obj.name和obj.text?
注释:函数func包含对象obj,但实际上它具有两个以上的属性
请让我知道javascript中建议的方法,以防止重复输入数组 代码
func(obj) {
obj.name = name;
obj.text = text;
arr.push(obj);
}
答案 0 :(得分:2)
可能在新的答案中,您会得到最好的建议,但是您可以做的是
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);
}
答案 1 :(得分:1)
您可以检查与现有对象的name
和text
匹配的数组对象。您可以使用
arr.find(item => item.name === obj.name && item.text === obj.text)
如果name
数组中已经存在具有text
和arr
值的对象,则返回一个对象。否则undefined
。
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);
}
}
答案 2 :(得分:-2)
为避免名称重复,请使用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将是一个对象,而不是数组。您将可以使用Object.keys
遍历其属性