Javascript如何按字段搜索数组

Javascript How to search in array by field

本问题已经有最佳答案,请猛点这里访问。

我有一个保存这些数据的变量:

1
2
3
4
5
6
{"main":[
  {"id":"123","name":"name 1"},
  {"id":"234","name":"name 2"}

  ]
}

我知道我要搜索的数据的ID。

我的问题是......我如何搜索id 234的名称(例如)是上面的数据?


使用Array#filter

The filter() method creates a new array with all elements that pass the test implemented by the provided function.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var object = {
 "main": [{
   "id":"123",
   "name":"name 1"
  }, {
   "id":"234",
   "name":"name 2"
  }]
};
var toFind ="234";
var filtered = object.main.filter(function(el) {
  return el.id === toFind;
});
console.log(filtered);

如果array中只有一个对象,则break break可能是首选。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var object = {
 "main": [{
   "id":"123",
   "name":"name 1"
  }, {
   "id":"234",
   "name":"name 2"
  }]
};
var toFind ="234";
for (var i = 0, len = object.main.length; i < len; i++) {
  if (object.main[i].id === toFind) {
    break;
  }
}
console.log(object.main[i].name);


在ES5环境中,如果只期望一个结果,则可以使用Array#some

1
2
3
4
5
6
7
8
9
10
11
var data = {"main": [{"id":"123","name":"name 1" }, {"id":"234","name":"name 2" }] },
    result;

data.main.some(function (a) {
    if (a.id === '234') {
        result = a;
        return true;
    }
});

console.log(result);

当您期望多个结果集时,最好使用Array#filter

1
2
3
4
5
6
var data = {"main": [{"id":"123","name":"name 1" }, {"id":"234","name":"name 2a" }, {"id":"234","name":"name 2" }] },
    result = data.main.filter(function (a) {
        return a.id === '234';
    });

console.log(result);

在ES6环境中,您可以使用Array#find作为第一个找到的元素,但如果还有更多要查找的元素,则使用Array#filter

1
2
3
4
var data = {"main": [{"id":"123","name":"name 1" }, {"id":"234","name":"name 2" }] },
    result = data.main.find(a => a.id === '234');

console.log(result);


如果id是唯一的,您可以使用find()

1
2
3
4
5
6
7
8
9
10
11
var data = {"main":[
  {"id":"123","name":"name 1"},
  {"id":"234","name":"name 2"}
  ]
}

var name = data.main.find(function(o) {
  return o.id == '234';
}).name;

console.log(name)


您可以使用Array.prototype.filter查找所有匹配的元素并将它们作为新数组返回。

要查找第一个匹配项,可以使用Array.prototype.find(ES2015 +)。