如何在JavaScript对象中找到一个数组的名称和列表,使用嵌套的for循环

问题描述:

所以,我有以下对象的数组:如何在JavaScript对象中找到一个数组的名称和列表,使用嵌套的for循环

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()); 

我不能够得到嵌套数组来检查的长度并返回标题更不用说完整列表。

什么,我想根据标准,看一个例子:

踏板车:“木”,“金属”,“玻璃” 棒球棒:“木”,金属”

什么时我的代码错误行为

+0

对象的数组,可以是'踏板车:“木”,“金属”,“玻璃”'应该是一个数组? '滑板车:[“木头”,“金属”,“玻璃”]' –

+0

您能否在第一次更新您的代码段并修复语法错误和不平衡的括号? – Stephan

您只需通过一个循环测试材料长度

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

钉住它。我一直在想很多。 – user8387535

您可以使用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" }

+0

从箭头函数返回一个表达式,而不是对象文字 – guest271314

+0

@guest我不太确定你的意思。 –

+0

在Answer'result'处的JavaScript会是一个包含'undefined'元素的数组'let arr = [{a:1}]; let res = arr.map(o => {b:1}); console.log(res)// [undefined]','res = arr.map(o =>({b:1})); console.log(res)// [{b:1}]' – guest271314