Javascript 如何从对象内部的数组中移除特定对象?(使用pop()或其他解决方案)
我想从myObj的岁月中去掉“hello5” 我使用了“pop”原型,但浏览器控制台返回以下结果: '未捕获的TypeError:无法读取未定义的'type'属性' 下面是我的问题的一个例子。您可以尝试并将从控制台看到错误消息 我尝试了很长时间,但没有找到任何解决方案,我需要你的建议和解决方案 代码:Javascript 如何从对象内部的数组中移除特定对象?(使用pop()或其他解决方案),javascript,arrays,json,object,Javascript,Arrays,Json,Object,我想从myObj的岁月中去掉“hello5” 我使用了“pop”原型,但浏览器控制台返回以下结果: '未捕获的TypeError:无法读取未定义的'type'属性' 下面是我的问题的一个例子。您可以尝试并将从控制台看到错误消息 我尝试了很长时间,但没有找到任何解决方案,我需要你的建议和解决方案 代码: var myObj = { test : 'testObje', langs : { 0 : 'EN', 1 : 'GR', 2 : 'RU', 3 : '
var myObj = {
test : 'testObje',
langs : {
0 : 'EN',
1 : 'GR',
2 : 'RU',
3 : 'TR'
},
comment : 'testComment'
};
var years = [];
for (i= 0; i<=10; i++)
{
years.push({
operator : i,
type : 'hello' + i
});
};
myObj.years = years;
var myObjLeng = myObj.years.length;
for(var i = 0; i < myObjLeng; i++) {
if(myObj.years[i].type == 'hello5') {
myObj.years.pop();
}
}
var myObj={
测试:“testObje”,
兰格:{
0:‘恩’,
1:‘GR’,
二:"汝",,
3:‘TR’
},
注释:“testComment”
};
风险值年数=[];
对于(i=0;i这个呢
myObj.years = myObj.years.filter(year => year.type != "hello5")
简言之,您将使用myObj.years
数组筛选filter回调中名为year
的每个元素。筛选将通过满足条件的这些元素。除了使用类型的“hello5”之外,所有元素都将满足
expression。最后将结果替换回来,就完成了。pop
始终删除最后一个元素,pop
对原始数组进行变异,这会影响索引,最终访问超出数组长度的索引,只需使用过滤器即可
let myObj={test:'testObje',langs:{0:'EN',1:'GR',2:'RU',3:'TR'},comment:'testComment'};
让年份=[];
for(让i=0;i键入!=='hello5')
log(myObj)
这里有一些很好的替代方法,所以让我来看看为什么会出现这种错误
您之所以会出现此错误,是因为您正在更改数组中间循环的长度。在循环开始时,您有11个元素,您可以使用它来定义for
循环将运行多少次。当您到达hello5
时,您将pop
最后一个元素,使数组变长10个元素。但是,您的for
循环仍将尝试访问第11个元素。这将是未定义的,当您尝试访问未定义的属性时(例如type
),您将得到一个类型错误。您的对象键选择错误。我建议您使用map()
函数代替for循环
var myObj={
测试:“testObje”,
兰格:{
0:‘恩’,
1:‘GR’,
二:"汝",,
3:‘TR’
},
注释:“testComment”
};
风险值年数=[];
对于(i=0;i{
Object.keys(item.map)(i=>myObj.years[key][i]===='hello5'&&(删除myObj.years[key]))
})
console.log(myObj)
pop将删除最后一个元素,这将更改原始数组,这就是为什么会出现“UncaughtTypeError:无法读取未定义的属性'type',因为在pop之后,在数组上找不到您试图访问的索引,而使用“array.filter”
let myObj=
{
测试:“testObje”,
语言:{0:EN',1:GR',2:RU',3:TR'},注释:'testComment'
};
让年份=[];
for(让i=0;i键入!=='hello5')
slice()it,don't pop()it.pop()获取最后一项是的,这里有很好的替代方案。您的评论对于理解错误具有明显的价值。它将帮助那些不理解此错误原因的人。感谢您的评论。我喜欢您的解决方案。谢谢您的帮助:)谢谢你的解释和支持:)谢谢你的解释和支持:)
let myObj =
{
test: 'testObje',
langs: {0: 'EN',1: 'GR',2: 'RU',3: 'TR'},comment: 'testComment'
};
let years = [];
for (let i = 0; i <= 10; i++) {
years.push({ operator: i, type: 'hello' + i });
};
myObj.years = years.filter(({type}) => type !== 'hello5')