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