繁体   English   中英

JavaScript:将对象转换为对象数组

[英]JavaScript: convert objects to array of objects

我有数以千计的遗留代码,用于将数组信息存储在非数组中。

例如:

container.object1 = someobject;
container.object2 = someotherobject;
container.object3 = anotherone;

我想要的是:

container.objects[1], container.objects[2], container.objects[3] etc.

名称的“对象”部分是不变的。 数字部分是它应该在数组中的位置。

我该怎么做呢?

假设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]点,那么你需要将一个空对象放入数组的第0个插槽中以开始,因为你的例子没有有一个object0项目。

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++;
}

另一种方法是使用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语句来检查一个键是否包含'object',并且在这种情况下只向您的条目添加一个元素(如果'objectwithobjects'包含您不想要的其他键)。

这很简单:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM