假设我有一个包含四个对象的数组:
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…在循环?
假设我有一个包含四个对象的数组:
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…在循环?
当前回答
jsObjects.find(x => x.b === 6)
中数:
如果数组中的元素满足提供的测试函数,find()方法将返回数组中的一个值。否则返回undefined。
附注:像find()和箭头函数这样的方法不被旧的浏览器(如IE)所支持,所以如果你想支持这些浏览器,你应该使用Babel编译你的代码。
其他回答
对象的过滤器数组,属性与值匹配,返回数组:
var result = jsObjects.filter(obj => {
return obj.b === 6
})
请参阅Array.prototype.filter()上的MDN文档
const jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ] let result = jsObjects。过滤器(obj => { 返回obj。B === 6 }) console.log(结果)
找到数组中第一个元素/对象的值,否则返回undefined。
var result = jsObjects.find(obj => {
return obj.b === 6
})
请参阅Array.prototype.find()上的MDN文档
const jsObjects = [ {a: 1, b: 2}, {a: 3, b: 4}, {a: 5, b: 6}, {a: 7, b: 8} ] let result = jsObjects。Find (obj => { 返回obj。B === 6 }) console.log(结果)
var result = jsObjects.filter(x=> x.b === 6);
会更好,在过滤器中使用return有时你无法得到结果(我不知道为什么)
jsObjects.find(x => x.b === 6)
中数:
如果数组中的元素满足提供的测试函数,find()方法将返回数组中的一个值。否则返回undefined。
附注:像find()和箭头函数这样的方法不被旧的浏览器(如IE)所支持,所以如果你想支持这些浏览器,你应该使用Babel编译你的代码。
使用_怎么样?找到(收集、谓语= _。[fromIndex=0])的low -dash从对象数组中通过对象属性值获取对象。你可以这样做:
var o = _.find(jsObjects, {'b': 6});
参数:
collection (Array|Object): The collection to inspect.
[predicate=_.identity] (Function): The function invoked per iteration.
[fromIndex=0] (number): The index to search from.
返回
(*): Returns the matched element (in your case, {a: 5, b: 6}), else undefined.
在性能方面,_.find()更快,因为它只提取第一个具有属性{'b': 6}的对象,另一方面,如果假设你的数组包含多个具有匹配属性集(key:value)的对象,那么你应该考虑使用_.filter()方法。因此,在您的情况下,由于您的数组只有一个具有此属性的对象,我将使用_.find()。
你可以像下面这样使用箭头函数:
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}