假设我有这个对象数组:
[300: {a:"some", b:"value"}, 301: {a: "another", b: "val"} ...]
我有那种对象而且我正在使用递归函数进行迭代,并且我无法将计数器更改为从300开始,我始终从0开始。
我正在考虑一个解决方案,从agrray中删除密钥,以便我有一个这样的数组:
[{a:"some", b:"value"}, {a: "another", b: "val"} ...]
我如何在javascript中执行此操作?另外,如果有另一种方法比创建一个能够移除键的功能快得多,那么它会更好。
答案 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]);
}
答案 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;
}
}
}