修改数组对象

时间:2016-04-27 11:54:25

标签: javascript jquery html arrays

我正在尝试重建一个数组,所以我需要建议使用最佳实践。 我有一个数组对象如下:

MainObject:
0:"Namebar"
  1: Object
    Name: "Title1"
    Url: "Url1"
  2: Object
    Name: "Title2"
    Url: "Url2"
  3: Object
    Name: "Title3"
    Url: "Url1"

在上面,因为“url”是相同的,我想将它分组为同一个对象,我希望输出格式如下:

0: "Url1"
  1: Object
    Name : "Title1"
    Url: "Namebar"
  2: Object
    Name : "Title3"
    Url: "Namebar"

1: "Url2"
  1: Object
    Name : "Title2"
    Url: "Namebar"

我正在尝试使用两个数组并循环通过MainObject来交换项目,我知道这不仅是一个繁琐的过程,而是非常高的时间复杂性。 例如:

var extract1 = MainObject[0];
var extract2 = using for loop to extract and swap ......

我没有得到任何其他方法来实现这一目标。在javascript / jquery中的任何方法吗?

2 个答案:

答案 0 :(得分:3)

这应该做的工作:

var extract1 = MainObject[0];
var newArray = {};
var newArrProp;
var extract1Props = Object.keys(extract1);
for( i = 0; i< extract1Props.length; i++)
{
   newArrProp = extract1Props[i];
   var nestedObjects = extract1[newArrProp];
   for(j = 0; j < nestedObjects.length; j++)
   {
      if(!newArray[nestedObjects[j].Url])
      {
          newArray[nestedObjects[j].Url] = [];              
      }
      newArray[nestedObjects[j].Url].push({Name:nestedObjects[j].Name,Url:newArrProp});
   }
}

Working fiddle

答案 1 :(得分:2)

你可以使用一些循环。

&#13;
&#13;
var MainObject = [{ "Namebar": [{ Name: "Title1", Url: "Url1" }, { Name: "Title2", Url: "Url2" }, { Name: "Title3", Url: "Url1" }] }],
    object2 = [];

MainObject.forEach(function (a) {
    Object.keys(a).forEach(function (k) {
        a[k].forEach(function (b) {
            var temp = {};
            if (!this[b.Url]) {
                temp[b.Url] = [];
                this[b.Url] = temp[b.Url];
                object2.push(temp);
            }
            this[b.Url].push({ name: b.Name, Url: k });
        }, this);
    }, this);
}, Object.create(null));

document.write('<pre>object2 ' + JSON.stringify(object2, 0, 4) + '</pre>');
document.write('<pre>MainObject ' + JSON.stringify(MainObject, 0, 4) + '</pre>');
&#13;
&#13;
&#13;