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

问题描述 投票:-1回答:3

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

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

谢谢,

javascript arrays extendscript
3个回答
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);

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

0
投票

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

  function findItem(list){
    for (var i=0; i < list.length; i++){
      if (list[i].property === true){return i}
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.