如何通过搜索数组找出对象的数组位置?

时间:2016-08-01 18:31:48

标签: javascript

如果我有这样的数组:

var array1 = 
[
  {"phraseId":"abc",
  "keyword":"bb",
  "posId":1},
  {"phraseId":"def",
  "keyword":"bb",
  "posId":1},
]

我怎样才能找到具有" def"的短语Id的对象?有第二名?

4 个答案:

答案 0 :(得分:6)

您可以映射对象并仅返回目标字段,然后使用内置的indexOf来获取位置:

array1.map(item => item.phraseId).indexOf('def')

答案 1 :(得分:5)

使用原生JavaScript findIndex 方法。

var array1 = [{
  "phraseId": "abc",
  "keyword": "bb",
  "posId": 1
}, {
  "phraseId": "def",
  "keyword": "bb",
  "posId": 1
}, ];

var pos = array1.findIndex(function(v) {
  // set your condition for finding object             
  return v.phraseId == 'def';
  // add `1` since you want to count from `1`            
}) + 1;

console.log("Position of the object " + pos);

旧浏览器check polyfill option

ES6 arrow function

var array1 = [{
  "phraseId": "abc",
  "keyword": "bb",
  "posId": 1
}, {
  "phraseId": "def",
  "keyword": "bb",
  "posId": 1
}, ];

var pos = array1.findIndex(v => v.phraseId == 'def') + 1;

console.log("Position of the object " + pos);

答案 2 :(得分:1)

它的工作原理如下:

array1.forEach((elem, index) => {if (elem.phraseId === "def")
   console.log("index = " + index);
});

答案 3 :(得分:1)

假设您的密钥已知(您知道自己总是在寻找phraseId),那么如果使用"那么您可以使用正常的for循环遍历数组。传统" JS,如果您使用的是ES6,则使用forEach。这是简单的for实现。

for (var i = 0; i < array1.length; i++ ){
    if(array[i].phraseId === 'def') {
    // we know "i" is the index, so do something...
    }
}

为了使它更通用,你可以在任何数组中搜索任何键,创建一个返回索引的函数:

function whatIndex (arr, key, val) {
    for (var i = 0; i < arr.length; i++) {
        if( arr[i][key] === val ) {
            return i;
        }
    }
}