如何在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());
我不能够得到嵌套数组来检查的长度并返回标题更不用说完整列表。
什么,我想根据标准,看一个例子:
踏板车:“木”,“金属”,“玻璃” 棒球棒:“木”,金属”
什么时我的代码错误行为
您只需通过一个循环测试材料长度
let items = [];
for(let i=0 ; i<data.length; i++){
if(data[i].materials.length >= 2){
items.push(data[i].title);
}
}
钉住它。我一直在想很多。 – 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" }
从箭头函数返回一个表达式,而不是对象文字 – guest271314
@guest我不太确定你的意思。 –
在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
对象的数组,可以是'踏板车:“木”,“金属”,“玻璃”'应该是一个数组? '滑板车:[“木头”,“金属”,“玻璃”]' –
您能否在第一次更新您的代码段并修复语法错误和不平衡的括号? – Stephan