我可以使用像.map()这样的函数的array.indexOf()吗?

时间:2018-03-02 19:20:11

标签: javascript arrays extendscript

我正在使用使用ECMAScript 3的Extendscript。因此我受到许多限制。我希望找到与Arr.find(func)类似但可用于ECMA3的内容。因为我需要一个方法来搜索对象数组,并找到一个在其属性中具有特定值的对象。 所以我发现Arr.indexOf()是ECMA3,但不知道如何将它与函数一起使用,因为这个方法适用于字符串数组。

我的问题是有没有办法使用带有函数的.indexOf()(如.find())来使它与对象或任何其他解决方案一起使用?

谢谢,

3 个答案:

答案 0 :(得分:1)

.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);

答案 1 :(得分:0)

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')

答案 2 :(得分:0)

非常感谢您的所有答案。它们对我都很有用。我根据Scott Marcus的建议使用了这个功能:

  function findItem(list){
    for (var i=0; i < list.length; i++){
      if (list[i].property === true){return i}
    }
  }