假设我有一个包含四个对象的数组:

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

是否有一种方法,我可以通过属性b的值获得第三个对象({a: 5, b: 6})例如,没有a for…在循环?


当前回答

好吧,有几种方法可以做到这一点,但让我们从最简单也是最新的方法开始,这个函数叫做find()。

当你使用find to时要小心,因为即使是IE11也不支持它,所以它需要被转译…

你有了这个物体

var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];

你可以这样写一个函数:

function filterValue(obj, key, value) {
  return obj.find(function(v){ return v[key] === value});
}

然后像这样使用函数:

filterValue(jsObjects, "b", 6); //{a: 5, b: 6}

在ES6中也有缩短版本:

const filterValue = (obj, key, value)=> obj.find(v => v[key] === value);

该方法只返回第一个匹配…,为了获得更好的结果和浏览器支持,你可以使用filter:

const filterValue = (obj, key, value)=> obj.filter(v => v[key] === value);

返回[{a: 5, b: 6}]…

此方法将返回一个数组…

你也可以简单地使用for循环,创建一个这样的函数:

function filteredArray(arr, key, value) {
  const newArray = [];
  for(i=0, l=arr.length; i<l; i++) {
    if(arr[i][key] === value) {
      newArray.push(arr[i]);
    }
  }
 return newArray;
}

像这样叫它:

filteredArray(jsObjects, "b", 6); //[{a: 5, b: 6}]

其他回答

你可以像下面这样使用箭头函数:

var demoArray = [
   {name: 'apples', quantity: 2},
   {name: 'bananas', quantity: 0},
   {name: 'cherries', quantity: 5}
];

var result = demoArray.filter( obj => obj.name === 'apples')[0];
console.log(result);
// {name: 'apples', quantity: 2}
var result = jsObjects.filter(x=> x.b === 6);

会更好,在过滤器中使用return有时你无法得到结果(我不知道为什么)

使用find和bind将特定的键值传递给回调函数。

   function byValue(o) { 
       return o.a === this.a && o.b === this.b; 
   };   

   var result = jsObjects.find(byValue.bind({ a: 5, b: 6 }));

实现需求的方法:

使用Array.find()方法:

const jsObject = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ]; const filteredResult = jsObject.find((e) => e.b == 6); console.log (filteredResult);

使用Array.filter()方法:

const jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ]; const filterObj = jsObjects.filter((e) => e.b == 6); console.log (filterObj [0]);

使用……循环中:

const jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ]; for (const i in jsObjects) { 如果(jsObjects[我]。B == 6) { console.log (jsObjects[我]); } }

var jsObjects = [{a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8}];

要访问第三个对象,使用:jsObjects[2]; 要访问第三个对象b的值,使用:jsObjects[2].b;