因此在folders数组内。我想打印出大小不为null的文件夹的“名称”。
let folders = [
{
name:'user_name',
size: 5455,
information: ' '
},
{
name:'untitled',
size: 545343,
information: 'no description'
},
{
name:'new_user',
size: null
}
];
所以我编写了这段代码是为了获取大小不为null的文件夹的名称,但是当我对其进行测试时,它只会打印出所有数组。我无法弄清楚我在做什么错。
folders.forEach((item) => {
let info = folders.filter((f) => {
if (f.size !== null);
return item.name
})
console.log(info)
});
答案 0 :(得分:1)
一个问题是if (f.size !== null);
不应包含结尾的分号-这会使测试变得毫无意义,因为无论是否为空,分号都将意味着无论其后一行都将被执行。另一个是filter
总是返回数组中的原始项目,如果测试通过-对于您正在执行的操作,您可以使用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;
}, [])
);
答案 1 :(得分:1)
要实现此目的,请考虑结合使用function writeBuffer(string) {
writeOut(string, 0);
}
function writeOut(string, start) {
if(start >= string.length) return;
myCharacteristic.writeValue(str2ab(string.substring(start, (start+20)))).then(foo => {
writeOut(string, (start+20));
});
}
和Array#filter()
。
首先,使用Array#map()
隔离大小不为filter()
的文件夹项目:
null
,然后使用.filter(folder => folder.size !== null)
将过滤结果中的每个文件夹项目转换为该文件夹的名称:
map()
完整的示例可以看作:
.map(folder => folder.name)