如何使用 javascript 检查数组中是否存在值
How to check if value exists in array using javascript
我有一个数组,格式如下:
"localValues" : [
{
"localValId" : "8KfbEozjdQYAefuHF",
"localProductCode" : "291105300",
"localMarkupVal" : "2.8",
"localMembersPrice" : "3344"
},
{
"localValId" : "qdCY6Kkvc7e8m4yxw",
"localProductCode" : "291105300234",
"localMarkupVal" : "2.8432",
"localMembersPrice" : "3344333"
},
{
"localValId" : "i827Eve8zBexRSTSP",
"localProductCode" : "291105300",
"localMarkupVal" : "2.8432",
"localMembersPrice" : "899"
}
我正在尝试 return localProductCode 的位置:
var a = localValues;
var location = a.indexOf('291105300');
console.log('location: ' + location)
但是,这个 returns -2 是不正确的,因为该代码确实存在于数组中。有人可以帮忙吗?提前致谢!
数组不包含 '291105300'
。
您需要为给定键找到具有该值的对象,而不是直接搜索字符串:
function hasMatch(array, key, value) {
var matches = array.filter(function(element) {
return element[key] === value;
});
return (matches.length > 0);
}
hasMatch(localValues, 'localProductCode', '291105300') // true
以下代码将找到您要查找的值的索引。如果该值不在数组中,这将是 return -1。摘自 this SO post。我刚刚在最后添加了警报。
var myArray = [0,1,2]
在您的情况下可能会变成 var myArray = localValues;
,然后您可以将 needle
设置为您要查找的值。
var indexOf = function(needle) {
if(typeof Array.prototype.indexOf === 'function') {
indexOf = Array.prototype.indexOf;
} else {
indexOf = function(needle) {
var i = -1, index = -1;
for(i = 0; i < this.length; i++) {
if(this[i] === needle) {
index = i;
break;
}
}
return index;
};
}
return indexOf.call(this, needle);
};
var myArray = localValues,
needle = 3,
index = indexOf.call(myArray, needle); // 1
alert(index);
编辑: 注意到有点晚了,您可能正在寻找数组中的 KEY。
function GetObjectKeyIndex(obj, keyToFind) {
var i = 0, key;
for (key in obj) {
if (key == keyToFind) {
return i;
}
i++;
}
return null;
}
// Now just call the following
GetObjectKeyIndex(localValues, "localProductCode");
上面的代码片段 return 是一个 ID(如果存在),或者 null
如果找不到具有这样名称的密钥。
console.log(JSON.stringify(localValues).indexOf('291105300') != -1 ? true : false);
到 return 找到该值的所有索引的数组,您可以使用 map
和 filter
:
function findValue(data, key, value) {
return data.map(function (el, i) {
return el[key] === value
}).map(function (el, i) {
return el === true ? i : null
}).filter(function (el) {
return el !== null;
});
}
findValue(data.localValues, 'localProductCode', '291105300'); // [0, 2]
我有一个数组,格式如下:
"localValues" : [
{
"localValId" : "8KfbEozjdQYAefuHF",
"localProductCode" : "291105300",
"localMarkupVal" : "2.8",
"localMembersPrice" : "3344"
},
{
"localValId" : "qdCY6Kkvc7e8m4yxw",
"localProductCode" : "291105300234",
"localMarkupVal" : "2.8432",
"localMembersPrice" : "3344333"
},
{
"localValId" : "i827Eve8zBexRSTSP",
"localProductCode" : "291105300",
"localMarkupVal" : "2.8432",
"localMembersPrice" : "899"
}
我正在尝试 return localProductCode 的位置:
var a = localValues;
var location = a.indexOf('291105300');
console.log('location: ' + location)
但是,这个 returns -2 是不正确的,因为该代码确实存在于数组中。有人可以帮忙吗?提前致谢!
数组不包含 '291105300'
。
您需要为给定键找到具有该值的对象,而不是直接搜索字符串:
function hasMatch(array, key, value) {
var matches = array.filter(function(element) {
return element[key] === value;
});
return (matches.length > 0);
}
hasMatch(localValues, 'localProductCode', '291105300') // true
以下代码将找到您要查找的值的索引。如果该值不在数组中,这将是 return -1。摘自 this SO post。我刚刚在最后添加了警报。
var myArray = [0,1,2]
在您的情况下可能会变成 var myArray = localValues;
,然后您可以将 needle
设置为您要查找的值。
var indexOf = function(needle) {
if(typeof Array.prototype.indexOf === 'function') {
indexOf = Array.prototype.indexOf;
} else {
indexOf = function(needle) {
var i = -1, index = -1;
for(i = 0; i < this.length; i++) {
if(this[i] === needle) {
index = i;
break;
}
}
return index;
};
}
return indexOf.call(this, needle);
};
var myArray = localValues,
needle = 3,
index = indexOf.call(myArray, needle); // 1
alert(index);
编辑: 注意到有点晚了,您可能正在寻找数组中的 KEY。
function GetObjectKeyIndex(obj, keyToFind) {
var i = 0, key;
for (key in obj) {
if (key == keyToFind) {
return i;
}
i++;
}
return null;
}
// Now just call the following
GetObjectKeyIndex(localValues, "localProductCode");
上面的代码片段 return 是一个 ID(如果存在),或者 null
如果找不到具有这样名称的密钥。
console.log(JSON.stringify(localValues).indexOf('291105300') != -1 ? true : false);
到 return 找到该值的所有索引的数组,您可以使用 map
和 filter
:
function findValue(data, key, value) {
return data.map(function (el, i) {
return el[key] === value
}).map(function (el, i) {
return el === true ? i : null
}).filter(function (el) {
return el !== null;
});
}
findValue(data.localValues, 'localProductCode', '291105300'); // [0, 2]