如何仅当对象不存在时才使用javascript添加对象
How to add object only if it does not exist in list using javascript?
我有一个空数组:"testList = []"我想要一个函数,仅在存在时才添加对象:
addIfNotInList({'keya':'a','keyb':'b'}, testList);
addIfNotInList({'keya1':'a5','keyb':'b2'}, testList);
addIfNotInList({'keya':'a','keyb':'b'}, testList);
其结果应该是:
testList = [{'keya':'a','keyb':'b'},{'keya1':'a5','keyb':'b2'}]
通常如果它不是一个对象,我会做:if(testList.indexOf(stringvalue)) {testList.push(stringvalue)}
虽然我发现这不适用于对象。
JSON.stringify(obj1) === JSON.stringify(obj2);
您可以将对象与上面的代码进行比较,但这有一些技巧。如果两个对象都像 {x: 100, y: 1}
和 {x: 100, y: 1}
则结果为 true,但如果{x: 100, y: 1}
和 {y: 1, x: 100}
则显示 false。
您可以使用比较器
var testList = [];
var myComparator = function (obj1, obj2) {
// check if they are the same
return obj1.keya === obj2.keya && obj1.keyb === obj2.keyb;
};
var addIfNotInList = function(obj, list, comparator) {
// you can also declare the comparing function here as default
comparator = comparator || myComparator;
// check if already in the list
var exists = list.some(function(listItem) {
return comparator(obj, listItem);
});
if(!exists) {
list.push(obj);
}
};
addIfNotInList({'keya':'a','keyb':'b'}, testList);
addIfNotInList({'keya':'a5','keyb':'b2'}, testList);
addIfNotInList({'keya':'a','keyb':'b'}, testList);
console.log(testList);
您还可以使用下划线.js的实用程序函数进行比较:isEqual
我会使用这样的东西,它循环遍历数组并根据您的参数检查每个项目。每次不匹配时counter
都会增加,因此如果counter
与末尾数组的长度一样大,则对象不得与其中已有的任何对象匹配。希望这有帮助!
var addIfNotInList = function(object, testList){
var counter = 0;
for(var i = 0; i < testList.length, i++){
if(testList[i]) !== object){
counter++;
}
}
if(counter === testList.length){
testList.push(object)
}
};
您应该通过循环testList
中的所有元素来比较对象相等性。 如果你使用UnderscoreJS,这很容易。
function addIfNotInList(obj, list) {
var doesNotExist = _.every(list, function(item) {
return !_.isEqual(item, obj);
});
if (doesNotExist) {
list.push(obj);
}
}
相关文章:
- 面向对象JavaScript中的私有函数
- 对象 Javascript 中的标签无效 - 想要添加事件列表器
- 将字符串转换为对象 javascript/jquery
- 正在检查对象javascript中是否存在嵌套属性
- 时间-日期对象JavaScript getUTCMilliseconds
- 仅在对象(javascript)中解析值
- 使用对象(JavaScript或jQuery)填充选择下拉列表
- 引用另一个对象javascript中的对象
- 如何删除列表中的对象?Javascript nodejs和下划线
- 无法从日期对象javascript获取日期和月份
- 如何在if语句中使用对象-Javascript
- 对象javascript错误
- 对象Javascript的少数实例
- 位置对象Javascript
- 将字符串传递到对象javascript中
- 获取对象Javascript或jQuery的最后一个值
- 鼠标接近对象Javascript
- 这个mixins代码是书中的错误吗;面向对象JavaScript的原理”;
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 访问对象javascript数组中的对象属性值