输出数组中键值对中不为空的键值对 JavaScript
outputting key value pairs that aren't null in Key Value pairs in arrays JavaScript
所以在文件夹数组中。我想打印出大小不为 null 的文件夹的 'name'。
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
所以我编写了这段代码是为了获取大小不为空的文件夹的名称,但是当我测试它时,它只打印出所有数组。我不太明白我做错了什么。
folders.forEach((item) => {
let info = folders.filter((f) => {
if (f.size !== null);
return item.name
})
console.log(info)
});
一个问题是 if (f.size !== null);
不应该有尾随分号 - 这将使测试变得毫无意义,因为无论它是否为 null,分号都意味着无论怎样都会执行后面的行.另一个是 filter
always returns 数组中的原始项目,如果测试通过 - 对于你正在做的事情,你可能会使用 filter
(过滤掉空大小)后跟 map
(到达 name
s):
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
console.log(
folders
.filter(({ size }) => size !== null)
.map(({ name }) => name)
);
如果你想在数组的 单次 迭代中实现它,请同时使用 reduce
到 filter
和 map
时间:
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
console.log(
folders.reduce((a, { name, size }) => {
if (size !== null) a.push(name);
return a;
}, [])
);
为此,请考虑将 Array#filter()
与 Array#map()
结合使用。
首先,使用filter()
隔离大小不是null
的文件夹项目:
.filter(folder => folder.size !== null)
然后使用map()
将筛选结果中的每个文件夹项目转换为该文件夹的名称:
.map(folder => folder.name)
完整的例子可以看成:
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
let result = folders
.filter(folder => folder.size !== null)
.map(folder => folder.name)
console.log(result)
所以在文件夹数组中。我想打印出大小不为 null 的文件夹的 'name'。
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
所以我编写了这段代码是为了获取大小不为空的文件夹的名称,但是当我测试它时,它只打印出所有数组。我不太明白我做错了什么。
folders.forEach((item) => {
let info = folders.filter((f) => {
if (f.size !== null);
return item.name
})
console.log(info)
});
一个问题是 if (f.size !== null);
不应该有尾随分号 - 这将使测试变得毫无意义,因为无论它是否为 null,分号都意味着无论怎样都会执行后面的行.另一个是 filter
always returns 数组中的原始项目,如果测试通过 - 对于你正在做的事情,你可能会使用 filter
(过滤掉空大小)后跟 map
(到达 name
s):
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
console.log(
folders
.filter(({ size }) => size !== null)
.map(({ name }) => name)
);
如果你想在数组的 单次 迭代中实现它,请同时使用 reduce
到 filter
和 map
时间:
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
console.log(
folders.reduce((a, { name, size }) => {
if (size !== null) a.push(name);
return a;
}, [])
);
为此,请考虑将 Array#filter()
与 Array#map()
结合使用。
首先,使用filter()
隔离大小不是null
的文件夹项目:
.filter(folder => folder.size !== null)
然后使用map()
将筛选结果中的每个文件夹项目转换为该文件夹的名称:
.map(folder => folder.name)
完整的例子可以看成:
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
let result = folders
.filter(folder => folder.size !== null)
.map(folder => folder.name)
console.log(result)