如何使用嵌套 for 循环在 object in JavaScript 中定位数组的名称和列表

How to locate the name, and list, of an array within an object in JavaScript using nested for loop

所以我有以下 objects 数组:

var data = [
    {
        "title": "scooter", 
        "materials": ["wood", "metal", "glass"]
    }, 
    {
        "title": "baseball bat", 
        "materials": ["wood", "metal"]
    },
    {
        "title": "coffee table", 
        "materials": ["wood"]
    }
];

尝试从函数中获取以下内容: 从材料数组中,大于或等于 2 种材料以及项目是什么。

我试过以下方法:

function testing() {
    let container = [];
    let items = [];
    for (let i = 0; i < data.length; i++) {
        container.push(data[i].materials);
        for (let j = 0; j < container.length; j++) {
            if (container[i][j] >= 2) {
                items.push(data[i].title);
            }
        }
    }
    return(items);
}
console.log(testing());

我无法获取嵌套数组来检查长度和 return 标题,更不用说完整列表了。

我希望根据条件查看的示例:

踏板车:"wood"、"metal"、"glass" 棒球棒:"wood",金属

我的代码哪里做错了?

您可以通过一个循环测试 material 长度!

let items = [];
for(let i=0 ; i<data.length; i++){
    if(data[i].materials.length >= 2){
        items.push(data[i].title);
    }   
}

您可以使用 filter:

var data = [{"title": "scooter", "materials":["wood","metal","glass"]}, {"title": "baseball bat", "materials":["wood","metal"]}, {"title": "coffee table", "materials":["wood"]}];

console.log(
  data.filter(obj => obj.materials.length >= 2)
)

或者将结果转换为基于键值:

var data = [{"title": "scooter", "materials":["wood","metal","glass"]}, {"title": "baseball bat", "materials":["wood","metal"]}, {"title": "coffee table", "materials":["wood"]}];

console.log(
  data.filter(obj => obj.materials.length >= 2).map(obj => ({[obj.title]: obj.materials}))
)

您可以使用映射函数和过滤函数来执行此操作:

let result = data.map(elem => ({count: elem.materials.length, materials: elem.materials, title: elem.title })).filter(elem => elem.count >= 2);

这样你就可以得到一个数组,其中包含 { count: 2, materials: ["wood", "metal"], title: "baseball bat" }

形式的对象