我已经尝试了许多方法来使其正常工作,但我无法
这是我的问题:
我在javascript中有一个对象数组,看起来像这样:
var myArrOfObjs = [];
var myObject1 = {};
myObject1.key = '1234';
myObject1.label = 'Richard Clifford';
myArrOfObjs.push( myObject1 );
我需要做类似的事情:
if( !containsObject( myObject1, myArrOfOjbs ) ){
// Do stuff
}
我需要containsObject
函数来检查找到的对象中的键值(如果有的话),所以如果containsObject( myObject1, myArrOfOjbs )
找到对象,我需要检查它的关键是否是与我目前试图推动的那个相同。
我需要它来检查密钥的原因是因为我已经尝试过这个函数,我在StackOverflow上找到了其他的地方,但它并不是很有效。
function containsObject(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i] == obj) {
return true;
}
}
return false;
}
即使已经包含对象,它仍然会将对象推送到数组。
如果您需要清理任何内容,请告诉我,我发现这不是最容易阅读/理解的帖子。
谢谢!
答案 0 :(得分:3)
您需要更改相等性测试以比较键:
function containsObject(obj, list) {
var i;
for (i = 0; i < list.length; i++) {
if (list[i].key === obj.key) {
return true;
}
}
return false;
}
答案 1 :(得分:1)
我已将此函数添加到Array-Object的原型链中,因此您只需调用list.hasObject(obj)
。
Array.prototype.hasObject = (
!Array.indexOf ? function (o)
{
var l = this.length + 1;
while (l -= 1)
{
if (this[l - 1] === o)
{
return true;
}
}
return false;
} : function (o)
{
return (this.indexOf(o) !== -1);
}
);
答案 2 :(得分:1)
也许这不是你正在寻找的答案,但我想知道为什么不使用Object而不是数组,如果你有一把钥匙:
var objectList = {};
var myObject { key : '1234', label : 'Richard Clifford' };
objectList[myObject.key] = myObject;
所以如果你想迭代:
for (var key in objectList) {
if (objectList.hasOwnProperty(key)
alert(key);
}
如果您想使用给定的密钥来访问该对象,您只需:
alert(objectList['1234'].label);