Javascript 通过索引删除当前对象,每个索引都带有下划线
我有一个嵌套对象,如下所示:Javascript 通过索引删除当前对象,每个索引都带有下划线,javascript,Javascript,我有一个嵌套对象,如下所示: var depositOptions = { 0 : {name: 'Monthly'}, 1 : {name : 'Standard'}, 2 : {name: 'Full' }, 3 : {name: 'Low' } }; 我需要删除name='Standard'中的对象,因此我将使用underline.js\对每个对象进行迭代,直到找到它,并存储索引 _.each(depositOptions, function(option, i) {
var depositOptions = {
0 : {name: 'Monthly'},
1 : {name : 'Standard'},
2 : {name: 'Full' },
3 : {name: 'Low' }
};
我需要删除name='Standard'
中的对象,因此我将使用underline.js\对每个对象进行迭代,直到找到它,并存储索引
_.each(depositOptions, function(option, i) {
if (option.name === 'Standard') {
// delete the object at index i
console.log(i)
}
});
因此,当它发现标准时,我想删除该选项-最简单的方法是什么
1) 在标准中找到每个循环时,是否将其移除?(因此不需要索引)
2) 存储要删除的对象的索引,然后在完成迭代后删除它?(我发现这很困难,因为如何在循环之外获取索引?)
3) 在我迭代DepositoOptions
时开始创建一个新数组,这样就可以在不包含standard
的情况下构建一个新数组
当我说我要删除它时,我希望它完全消失。因此,不仅仅像使用delete
那样使用undefined
。使用.filter
或.reject
。使用\每个都不清楚。请注意,这些将返回一个新数组
var newArray = _.filter(depositOptions, function(option) {
return option.name !== 'Standard';
});
另外,看起来您有一个对象,而不是数组。这是一个数组:
var depositOptions = [
{name: 'Monthly'},
{name : 'Standard'},
{name: 'Full' },
{name: 'Low' }
];
改用.filter
或.reject
。使用\每个都不清楚。请注意,这些将返回一个新数组
var newArray = _.filter(depositOptions, function(option) {
return option.name !== 'Standard';
});
另外,看起来您有一个对象,而不是数组。这是一个数组:
var depositOptions = [
{name: 'Monthly'},
{name : 'Standard'},
{name: 'Full' },
{name: 'Low' }
];
您可以在不使用
功能的情况下使用
\来消除不需要的钥匙
var depositOptions = {
0 : {name: 'Monthly'},
1 : {name : 'Standard'},
2 : {name: 'Full' },
3 : {name: 'Low' }
};
depositOptions = _.without(depositOptions, _.findWhere(depositOptions, {
name: 'Standard'
}));
console.log(depositOptions);
希望这有帮助 您可以使用功能,而不使用功能来消除不需要的钥匙
var depositOptions = {
0 : {name: 'Monthly'},
1 : {name : 'Standard'},
2 : {name: 'Full' },
3 : {name: 'Low' }
};
depositOptions = _.without(depositOptions, _.findWhere(depositOptions, {
name: 'Standard'
}));
console.log(depositOptions);
希望这有帮助 如果要返回具有筛选属性的新对象,可以在纯javascript中使用object.keys()
和reduce()
var存款选项={
0:{name:'Monthly'},
1:{name:'Standard'},
2:{name:'Full'},
3:{name:'Low'}
};
var result=Object.keys(存款选项).reduce(函数(r,k){
if(存款选项[k].name!=“标准”)r[k]=存款选项[k]
返回r;
}, {})
console.log(result)
如果您想返回带有过滤属性的新对象,可以在纯javascript中使用object.keys()
和reduce()
var存款选项={
0:{name:'Monthly'},
1:{name:'Standard'},
2:{name:'Full'},
3:{name:'Low'}
};
var result=Object.keys(存款选项).reduce(函数(r,k){
if(存款选项[k].name!=“标准”)r[k]=存款选项[k]
返回r;
}, {})
console.log(result)
根据我的说法,使用下划线的最佳方法是\u拒绝
用法-
_.reject(depositOptions, function(val){ return val.name == 'Standard'; });
选项3绝对不是选项,因为您使用的是排除方法,即尝试获取除所需元素之外的所有其他元素并使用所需元素。对你的实现来说太脏了
选项2比选项3好,但并不理想,因为您已经找到了元素&您仍然在浪费时间迭代其他元素
带有调整的选项1是给定选项中的最佳解决方案-小调整包括在if语句中添加中断语句&存储元素后。这样,您只需迭代,直到找到元素 根据我的说法,使用下划线的最佳方法是\u拒绝
用法-
_.reject(depositOptions, function(val){ return val.name == 'Standard'; });
选项3绝对不是选项,因为您使用的是排除方法,即尝试获取除所需元素之外的所有其他元素并使用所需元素。对你的实现来说太脏了
选项2比选项3好,但并不理想,因为您已经找到了元素&您仍然在浪费时间迭代其他元素
带有调整的选项1是给定选项中的最佳解决方案-小调整包括在if语句中添加中断语句&存储元素后。这样,您只需迭代,直到找到元素 您有两个选项,要么修改原始对象,要么创建一个没有不需要的键值对的新对象。所有的例子都在普通的ES6中,但是您可以很容易地使用lodash方法。他们将排除所有匹配项,而不仅仅是第一个匹配项
突变。使用和
const存款选项={
0: {
姓名:“每月”
},
1: {
名称:“标准”
},
2: {
名称:“完整”
},
3: {
名称:“低”
}
};
for(让对象的键。键(选项)){
如果(存款选项[key].name=='Standard'){
删除存款选项[键];
}
}
console.log(存储选项)代码>您有两个选项,要么修改原始对象,要么创建一个没有不需要的键值对的新对象。所有的例子都在普通的ES6中,但是您可以很容易地使用lodash方法。他们将排除所有匹配项,而不仅仅是第一个匹配项
突变。使用和
const存款选项={
0: {
姓名:“每月”
},
1: {
名称:“标准”
},
2: {
名称:“完整”
},
3: {
名称:“低”
}
};
for(让对象的键。键(选项)){
如果(存款选项[key].name=='Standard'){
删除存款选项[键];
}
}
console.log(存储选项)
是否要更改原始对象,或创建新的筛选对象?删除
不会将其设置为未定义。如果对象中不存在键
或属性
,当您访问它时,您将获得未定义
。是否要更改原始对象,或者创建一个新的过滤对象?delete
不会将其设置为undefined。如果对象中不存在键
或属性
,当您访问它时,您将获得undefined
。