从javascript中的键值对象对中删除键

时间:2014-04-05 14:44:06

标签: javascript object key

假设我有这个对象数组:

[300: {a:"some", b:"value"}, 301: {a: "another", b: "val"} ...]

我有那种对象而且我正在使用递归函数进行迭代,并且我无法将计数器更改为从300开始,我始终从0开始。

我正在考虑一个解决方案,从agrray中删除密钥,以便我有一个这样的数组:

[{a:"some", b:"value"}, {a: "another", b: "val"} ...]

我如何在javascript中执行此操作?另外,如果有另一种方法比创建一个能够移除键的功能快得多,那么它会更好。

3 个答案:

答案 0 :(得分:1)

这将在元素列表后给出语法错误(SyntaxError:missing):

var data = [300: {a:"some", b:"value"}, 301: {a: "another", b: "val"}];

你的意思是:

var data = {300: {a:"some", b:"value"}, 301: {a: "another", b: "val"}};

要将其转换为数组,请遍历对象并将每个值推送到新数组中:

var arr = [];
for (var k in data) {
  arr.push(data[k]);
}

Fiddle

答案 1 :(得分:1)

这里有一点需要澄清。如果有一个Array对象,其值从300开始作为其索引,则意味着您有300个具有undefined值的索引,但如果它只是一个Array-like对象,则它可能完全不同。

假设这不是类似数组且是实际的Array,因此您必须对其进行过滤,以便从阵列中删除所有undefined值,因此您的数组应该像:

var arr = [/*0*/undefined, ..,/*299*/undefined, /*300*/{a:"some", b:"value"}, /*301*/ {a: "another", b: "val"} ...]
var result = arr.filter(function(value,index){
    return (value !== undefined);
});

但是你在问题中提到的,更有可能是一个javascript对象,所以要做你想做的事情:

var myObj = {300: {a:"some", b:"value"}, 301: {a: "another", b: "val"} };
var result = {};
for(var key in obj){
    if(obj.hasOwnProperty(key)){
        result.push(obj[key]);
    }
}
这个for循环hasOwnProperty函数中的

可以帮助您确定它是否是实际对象值之一,而不是对象原型链中的其他可能键。

答案 2 :(得分:1)

如果你的意思是数组的初始结构是这样的:

var data = [{300: {a:"some", b:"value"}}, {301: {a: "another", b: "val"}}];

然后这应该工作(结果数组):

var result = [];
var data = [{300: {a:"some", b:"value"}}, {301: {a: "another", b: "val"}}];
for(var i =0; i < data.length; i++){
    for(var key in data[i]) {
        if(data[i].hasOwnProperty(key)) {
            result.push(data[i][key]);
            break;
        }
    }
}