我正在尝试记录当前的读取状态,但是在调用displayInformation()时,我还得到一个空数组。如何在没有额外空数组的情况下获得我想要的结果?为什么它返回一个空数组?
function displayInformation() {
function statusRead(obj){
if (obj.readingStatus === false) {
console.log('You still need to read ' + obj.title + ' by ' + obj.author + '.');
} else {
console.log('Already read ' + obj.title + ' by' + obj.author + '.');
}
}
var statusFilter = library.filter(statusRead);
console.log(statusFilter);
}
var library = [
{
title: 'Bill Gates',
author: 'The Road Ahead',
readingStatus: true
},
{
title: 'Steve Jobs',
author: 'Walter Isaacson',
readingStatus: true
},
{
title: 'Mockingjay: The Final Book of The Hunger Games',
author: 'Suzanne Collins',
readingStatus: false
}
];
displayInformation();
当你调用displayInformation()时,这是什么记录到控制台
"Already read Bill Gates byThe Road Ahead."
"Already read Steve Jobs byWalter Isaacson."
"You still need to read Mockingjay: The Final Book of The Hunger Games by Suzanne Collins."
[]
答案 0 :(得分:2)
如何在没有额外空数组的情况下获得我想要的结果?
您必须使用.forEach()
或普通for loop
来执行您想要执行的操作。 .filter()
用例与您的完全不同。
为什么它会返回一个空数组?
由于.filter()
方法将返回已过滤的数组,因此当您的callBack
函数一直返回undefined
时,它会返回一个空数组。
您的代码应该是这样的,
function displayInformation(library) {
library.forEach(function(obj){
if (obj.readingStatus === false) {
console.log('You still need to read ' + obj.title + ' by ' + obj.author + '.');
} else {
console.log('Already read ' + obj.title + ' by' + obj.author + '.');
}
});
}
displayInformation(library);
纯粹的for-loop版本,
function displayInformation(library) {
var i = 0, len = library.length, obj;
for (; i < len; i++) {
obj = library[i];
if (obj.readingStatus === false) {
console.log('You still need to read ' + obj.title + ' by ' + obj.author + '.');
} else {
console.log('Already read ' + obj.title + ' by' + obj.author + '.');
}
}
}
displayInformation(library);
答案 1 :(得分:0)
这是因为您正在打印statusRead
,这是使用statusRead
过滤的结果。由于true
永远不会返回var evens = numbers.filter(function(x) {
return x % 2 === 0;
});
,因此结果将为空。 filter
的工作方式是它将从旧数组创建一个新数组,其中包含返回truthy的每个值。例如,以下是如何从数字列表中获取所有偶数。
true
因此,再次,由于您永远不会从filter
谓词返回console.log
,因此您将获得一个空白列表,然后前往for (var i = 0; i < library.length; i++) {
var obj = library[i];
...
}
。
要遍历列表,您应该使用for
loop:
library.forEach(function(obj) {
...
});
<MenuItem Header="Remove Car" ItemsSource="{Binding AvailableCars}" click"removeCar"/>