【问题标题】:Find object by property in an array of JavaScript objects inside another array在另一个数组中的 JavaScript 对象数组中按属性查找对象
【发布时间】:2016-06-10 14:05:23
【问题描述】:

我有一个名为mainarray 的数组,其中包含三个对象。在每个对象内部都有另一个名为innerarray 的数组,它有自己的三个对象。

如何在每个innerarray 中获取第二个对象的第一个属性?这可能吗?

mainarray: [{
    innerarray: [{
        property1: value1,
        property2: value2,
        property3: value3,
    }, {
        propertyiwant: value1,
        property2: value2,
        property3: value3,
    }, {
        property1: value1,
        property2: value2,
        property3: value3,
    }]
}, {
    innerarray: [{
        property1: value1,
        property2: value2,
        property3: value3,
    }, {
        propertyiwant: value1,
        property2: value2,
        property3: value3,
    }, {
        property1: value1,
        property2: value2,
        property3: value3,
    }]
}, { 
    innerarray: [{
        property1: value1,
        property2: value2,
        property3: value3,
    }, {
        propertyiwant: value1,
        property2: value2,
        property3: value3,
    }, {
        property1: value1,
        property2: value2,
        property3: value3,
    }]
}]

这个问题与From an array of objects, extract value of a property as array 完全不同。在这里,我试图在另一个数组中的数组中获取对象的属性。

【问题讨论】:

    标签: javascript jquery arrays object


    【解决方案1】:
    mainarray.map(item => item.innerarray[1].propertyiwant);
    

    或者,如果你只使用下划线和 es5

    _.map(mainarray, function(item){
        return item.innerarray[1].propertyiwant
    });
    

    【讨论】:

    • 好吧,Array.prototype.map 在 ES5 中 :-)
    • 是的:) 我刚刚介绍了带有箭头函数的方法,例如:)
    【解决方案2】:

    你可以试试下面的代码。如果它们存在,它将在每个子数组中为您带来每一秒(在第 2、第 4、第 6 ......等意义上)对象。如果您只对第二个对象感兴趣,那么只需替换整个e.innerarray.reduce(..。与e.innerarray[2] 分开。这将为您提供整个所需的第二个对象,然后您可以访问它的任何您喜欢的属性。

    var mainarray = [{
        innerarray: [{
            property1: "value1",
            property2: "value2",
            property3: "value3",
        }, {
            propertyiwant: "value1",
            property2: "value2",
            property3: "value3",
        }, {
            property1: "value1",
            property2: "value2",
            property3: "value3",
        }]
    }, {
        innerarray: [{
            property1: "value1",
            property2: "value2",
            property3: "value3",
        }, {
            propertyiwant: "value1",
            property2: "value2",
            property3: "value3",
        }, {
            property1: "value1",
            property2: "value2",
            property3: "value3",
        }]
    }, { 
        innerarray: [{
            property1: "value1",
            property2: "value2",
            property3: "value3",
        }, {
            propertyiwant: "value1",
            property2: "value2",
            property3: "value3",
        }, {
            property1: "value1",
            property2: "value2",
            property3: "value3",
        }]
    }],
    mapped = mainarray.map(e => e.innerarray.reduce((p,c,i) => (i%2 && p.push(c),p),[]));
    console.log(mapped);

    【讨论】:

    • 嘿,谢谢你的时间,我试过你说的:mapped = mainarray.map(e => e.innerarray[2].propertiwant) 但它给我一个错误“无法读取属性不明确的” 。我也试过 mainarray.map(e => e.innerarray[2]['propertiwant']) 但还是不行
    • 数组从索引 0 开始,所以你需要innerarray[1]
    • @krimz repl.it/C0aO 基本上这正是 Foker 所建议的。
    • krimz,当我测试它们时,这个和@Foker 的答案都很好。你应该给出你预期的输出,并展示你到目前为止所做的尝试。
    • @FizzyTea 嘿!你是对的,他们在这些例子中工作得很好。我正在寻找其他东西,我只是不够清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多