如何删除数组内对象的值

这怎么行不通?在我看来,一切都是对的。我错过了什么吗?

编写一个名为 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));


以上是如何删除数组内对象的值的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>