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

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…在循环?


当前回答

实现需求的方法:

使用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 result = jsObjects.filter(x=> x.b === 6);

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

让这个答案的最佳/最快部分更具可重用性和清晰性:

function getElByPropVal(myArray, prop, val){
    for (var i = 0, length = myArray.length; i < length; i++) {
        if (myArray[i][prop] == val){
            return myArray[i];
        }
    }
}

看起来在ECMAScript 6提案中有数组方法find()和findIndex()。MDN还提供了可以包含在所有浏览器中获得这些功能的腻子。

find ():

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].find(isPrime) ); // undefined, not found
console.log( [4, 5, 8, 12].find(isPrime) ); // 5

findIndex ():

function isPrime(element, index, array) {
    var start = 2;
    while (start <= Math.sqrt(element)) {
        if (element % start++ < 1) return false;
    }
    return (element > 1);
}

console.log( [4, 6, 8, 12].findIndex(isPrime) ); // -1, not found
console.log( [4, 6, 7, 12].findIndex(isPrime) ); // 2

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

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}
jsObjects.find(x => x.b === 6)

中数:

如果数组中的元素满足提供的测试函数,find()方法将返回数组中的一个值。否则返回undefined。


附注:像find()和箭头函数这样的方法不被旧的浏览器(如IE)所支持,所以如果你想支持这些浏览器,你应该使用Babel编译你的代码。