我正在使用使用ECMAScript 3的Extendscript。因此我受到许多限制。我希望找到类似于Arr.find(func)
但可用于ECMA3的东西。因为我需要一个方法来搜索对象数组,并找到一个在其属性中具有特定值的对象。所以我发现Arr.indexOf()
是ECMA3,但不知道如何将它与函数一起使用,因为这个方法适用于字符串数组。
我的问题是有没有办法使用.indexOf()函数(如.find()
)使它与对象或任何其他解决方案一起使用?
谢谢,
.indexOf()
在这里不会帮助你,因为它只搜索数组。您需要搜索数组中的对象,因此您需要遍历对象并尝试手动查找匹配项。
var objArray = [
{key1: "foo", key2: true, key3: 10 },
{key1: "foo2", key2: false, key3: 100 },
{key1: "foo3", key2: true, key3: 101, key4: 101 }
];
function findKey(ary, findVal){
// Loop over the array
for(var i = 0; i < ary.length; i++){
// Loop over objects keys
for(var key in ary[i]){
// Compare current key value against passed value to find
if(ary[i][key] === findVal){
console.log(findVal + " was found in object: " + i + ", key: " + key);
}
}
}
}
findKey(objArray, 101);
findKey(objArray, true);
findIndex是一个Array函数,它接受一个函数而不是value但是给出了索引。我不熟悉ExtendScript,但Mozilla Developer页面中有一个可以添加的polyfill。如果有map并且find,那么findIndex也可以在那里,但你也可以将map和indexOf与以下方式组合成一个衬里。
var people = [{name: 'bob', age: 25}, {name: 'mary', age: 5}]
var index = people.map(p => p.name).indexOf('bob')
非常感谢你的所有答案。它们对我都很有用。我根据Scott Marcus的建议使用了这个功能:
function findItem(list){
for (var i=0; i < list.length; i++){
if (list[i].property === true){return i}
}
}