Javascript 如何删除数组中对象的值

Javascript 如何删除数组中对象的值,javascript,Javascript,这怎么不起作用?我觉得一切都很好。我错过什么了吗 编写一个名为removePartyKillers的函数,该函数接受类似“playlist”的数组 (见下文)并返回播放列表的副本,其中任何歌曲长度超过8分钟 已被删除。您可以放心地假设播放列表是一组对象。 每个对象都具有“标题”、“艺术家”和“持续时间秒”属性 var awesomePlaylist = [ { title: "Hay Day", artist: "Robo-Crop",

这怎么不起作用?我觉得一切都很好。我错过什么了吗

编写一个名为removePartyKillers的函数,该函数接受类似“playlist”的数组 (见下文)并返回播放列表的副本,其中任何歌曲长度超过8分钟 已被删除。您可以放心地假设播放列表是一组对象。 每个对象都具有“标题”、“艺术家”和“持续时间秒”属性

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
本身不是一个对象(关联数组),而是一个数组;因此,您需要操作一个数组<代码>删除操作对象中的属性

let awesomePlaylist=[{
标题:“干草日”,
艺术家:“机器人作物”,
持续时间秒:378
}, {
标题:“10000英镑”,
艺术家:“L-Ton Jonn”,
持续时间秒:498,
}, {
标题:“凯撒沙拉”,
艺人:“DJ晚餐朱利叶斯”,
持续时间秒:600,
}, {
标题:“英国人正在赶路”,
艺术家:“劳尔·佩维尔”,
持续时间秒:1095,
}, {
标题:“第13条”,
艺术家:“医生们”,
持续时间秒:185,
}];
功能移除Partykillers(arr){

return arr.filter(song=>song.durationInSeconds问题在于key本身是一个对象,当它转到下一行时,您正试图访问对象内每个可能属性的“durationofSeconds”。您可以使用key直接访问所需的属性并进行检查

function removePartyKillers(arr) {
    var copy = arr.slice();
    for (var key of copy) {
            if (key['durationInSeconds'] > (60 * 8)) {
                delete key['durationInSeconds'];
            
            //console.log(key)
        }
    }
    return copy;
}


delete
仅用于删除对象键。您不能使用它删除数组中的项。只需创建一个新的空数组并添加筛选的项(或者更好:使用
.filter
):

var awesomePlaylist=[
{
标题:“干草日”,
艺术家:“机器人作物”,
持续时间秒:378
}, {
标题:“10000英镑”,
艺术家:“L-Ton Jonn”,
持续时间秒:498,
}, {
标题:“凯撒沙拉”,
艺人:“DJ晚餐朱利叶斯”,
持续时间秒:600,
}, {
标题:“英国人正在赶路”,
艺术家:“劳尔·佩维尔”,
持续时间秒:1095,
}, {
标题:“第13条”,
艺术家:“医生们”,
持续时间秒:185,
}
];
功能移除Partykillers(arr){
var copy=[];
用于(arr的var项目){

如果(item['durationInSeconds']如Miu所述,delete语句仅用于对象属性,而不是数组元素

在不使用筛选器的情况下,实现此目的的最佳方法之一是在数组中向后循环,如果需要,则删除项。之所以需要向后移动,是因为如果删除项,则下一个项将接收其索引,并且最终跳过它

var awesomePlaylist=[
{
标题:“干草日”,
艺术家:“机器人作物”,
持续时间秒:378
}, {
标题:“10000英镑”,
艺术家:“L-Ton Jonn”,
持续时间秒:498,
}, {
标题:“凯撒沙拉”,
艺人:“DJ晚餐朱利叶斯”,
持续时间秒:600,
}, {
标题:“英国人正在赶路”,
艺术家:“劳尔·佩维尔”,
持续时间秒:1095,
}, {
标题:“第13条”,
艺术家:“医生们”,
持续时间秒:185,
}
];
功能移除Partykillers(arr){
var copy=arr.slice();
对于(var i=copy.length-1;i>=0;i--){
var obj=复制[i];
如果(obj['durationInSeconds']>(60*8)){
拷贝。拼接(i,1);
}
}
返回副本;
}
log(删除partykillers(awesomePlaylist));
/*结果:
{
标题:“干草日”,
艺术家:“机器人作物”,
持续时间秒:378
}, {
标题:“第13条”,
艺术家:“医生们”,
持续时间秒:185,
}
]

*/
不,因为我相信这就是我所做的。有没有办法像我那样做呢?我肯定有些小错误。我不想使用任何花哨的方法。因为数组中的元素是对象,所以我不能删除它们?不,你不能。我在你的代码中发现了一个错误。我正在努力解决它。哈哈。请稍等或者我希望有人会这么做:)我想我明白你的意思了。所以,如果我只想删除durationInSeconds键,但仍然返回数组元素中剩余的2个键,那么delete会起作用吗?这是最Java脚本化的解决方案,但可以复制。如果你不需要元素,可以拼接()但更确切地说,数组也是一个对象,JavaScript中没有“关联数组”,这是其他语言的人强加在JS对象上的语义概念。