我有数以千计的遗留代码,用于将数组信息存储在非数组中。
例如:
container.object1 = someobject;
container.object2 = someotherobject;
container.object3 = anotherone;
我想要的是:
container.objects[1], container.objects[2], container.objects[3] etc.
名称的“对象”部分是不变的。数字部分是它应该在数组中的位置。
我该怎么做?
答案 0 :(得分:6)
假设object1,object2等是顺序的(就像一个数组),那么你可以遍历容器对象并找到所有存在的顺序objectN属性并将它们添加到数组中并在停止循环时一个人失踪了。
container.objects = []; // init empty array
var i = 1;
while (container["object" + i]) {
container.objects.push(container["object" + i]);
i++;
}
如果您希望第一个项目object1
位于[1]
点而不是数组中更典型的[0]
点,那么您需要将一个空对象放入数组中因为您的示例没有object0
项目,所以开始使用第0个插槽。
container.objects = [{}]; // init array with first item empty as an empty object
var i = 1;
while (container["object" + i]) {
container.objects.push(container["object" + i]);
i++;
}
答案 1 :(得分:2)
另一种方法是使用keys
。
var unsorted = objectwithobjects;
var keys = Object.keys(unsorted);
var items = [];
for (var j=0; j < keys.length; j++) {
items[j] = unsorted[keys[j]];
}
您可以添加if语句来检查密钥是否包含&#39; object&#39;并且只在这种情况下为您的条目添加一个元素(如果&#39; objectwithobjects&#39;包含您不想要的其他键)。
答案 2 :(得分:1)
这很简单:
var c = { objects: [] };
for (var o in container) {
var n = o.match(/^object(\d+)$/);
if (n) c.objects[n[1]] = container[o];
}
现在c
是您的新容器对象,其中c.object[1] == container.object1