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