假设我有一个包含四个对象的数组:
var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];
有没有办法可以{a: 5, b: 6}通过属性的值获取第三个对象()b,例如没有for...in循环?
假设我有一个包含四个对象的数组:
var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];
有没有办法可以{a: 5, b: 6}通过属性的值获取第三个对象()b,例如没有for...in循环?
Filter 属性与值匹配的对象数组,返回数组:
var result = jsObjects.filter(obj => {
  return obj.b === 6
})
请参阅有关 Array.prototype.filter()的MDN 文档
Find数组中第一个元素/对象的值,否则undefined返回。
var result = jsObjects.find(obj => {
  return obj.b === 6
})
我不知道您为什么反对 for 循环(大概您的意思是 a for loop,而不是专门的for..in),它们快速且易于阅读。无论如何,这里有一些选择。
For循环:
function getByValue(arr, value) {
  for (var i=0, iLen=arr.length; i<iLen; i++) {
    if (arr[i].b == value) return arr[i];
  }
}
。筛选
function getByValue2(arr, value) {
  var result  = arr.filter(function(o){return o.b == value;} );
  return result? result[0] : null; // or undefined
}
.forEach
function getByValue3(arr, value) {
  var result = [];
  arr.forEach(function(o){if (o.b == value) result.push(o);} );
  return result? result[0] : null; // or undefined
}
另一方面,如果您确实是指 for..in 并且想要查找具有值为 6 的任何属性的对象,那么您必须使用 for..in 除非您通过名称进行检查。
例子
function getByValue4(arr, value) {
  var o;
  for (var i=0, iLen=arr.length; i<iLen; i++) {
    o = arr[i];
    for (var p in o) {
      if (o.hasOwnProperty(p) && o[p] == value) {
        return o;
      }
    }
  }
}
尝试滤镜阵列用于过滤的方法array of objects有property。
var jsObjects = [
   {a: 1, b: 2}, 
   {a: 3, b: 4}, 
   {a: 5, b: 6}, 
   {a: 7, b: 8}
];
使用数组过滤方法:
var filterObj = jsObjects.filter(function(e) {
  return e.b == 6;
});
使用 for 循环:
for (var i in jsObjects) {
  if (jsObjects[i].b == 6) {
    console.log(jsObjects[i]); // {a: 5, b: 6}
  }
}
工作小提琴: https : //jsfiddle.net/uq9n9g77/
好的,有几种方法可以做到这一点,但让我们从最简单和最新的方法开始,这个函数被称为find()。
使用时要小心find,因为即使 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}]