如何删除数组内对象的值
这怎么行不通?在我看来,一切都是对的。我错过了什么吗?
编写一个名为 removePartyKillers 的函数,该函数接受一个类似于“播放列表”(见下文)的数组,并返回该播放列表的副本,其中任何超过 8 分钟的歌曲都已被删除。您可以安全地假设播放列表是一组对象。每个对象都将具有属性 title、artist 和 durationInSeconds。
var awesomePlaylist = [
{
title: "Hay Day",
artist: "Robo-Crop",
durationInSeconds: 378
}, {
title: "10,000 Pounds",
artist: "L-Ton Jonn",
durationInSeconds: 498,
}, {
title: "Caesar's Salad",
artist: "DJ Dinner Julius",
durationInSeconds: 600,
}, {
title: "The British Are On Their Way",
artist: "Raul Pevere",
durationInSeconds: 1095,
}, {
title: "13th",
artist: "The Doctors",
durationInSeconds: 185,
}
];
function removePartyKillers(arr) {
var copy = arr.slice();
for (var key of copy) {
for (var key2 in key) {
if (key2['durationInSeconds'] > (60 * 8)) {
delete key2;
}
}
}
return copy;
}
console.log(removePartyKillers(awesomePlaylist));
/* Results:
{
title: "Hay Day",
artist: "Robo-Crop",
durationInSeconds: 378
}, {
title: "13th",
artist: "The Doctors",
durationInSeconds: 185,
}
]
*/
回答
我认为.filter()在这种情况下很有用。
注意: awesomePlaylist它本身不是一个对象(关联数组)而是一个数组;因此您需要操作一个数组。delete操作对象中的属性。
let awesomePlaylist = [{
title: "Hay Day",
artist: "Robo-Crop",
durationInSeconds: 378
}, {
title: "10,000 Pounds",
artist: "L-Ton Jonn",
durationInSeconds: 498,
}, {
title: "Caesar's Salad",
artist: "DJ Dinner Julius",
durationInSeconds: 600,
}, {
title: "The British Are On Their Way",
artist: "Raul Pevere",
durationInSeconds: 1095,
}, {
title: "13th",
artist: "The Doctors",
durationInSeconds: 185,
}];
function removePartyKillers(arr) {
return arr.filter(song => song.durationInSeconds <= 8*60)
}
console.log(removePartyKillers(awesomePlaylist));