【问题标题】:Angularjs join two objectsAngularjs加入两个对象
【发布时间】:2017-07-03 07:44:56
【问题描述】:

我有两个对象:

obj1 = { 'id1': 1, 'name1': 'anyone1', 'birth1': 22, 'year1': 1993 };

obj2 = { 'id2': 1, 'name2': 'anyone', 'birth2': 22, 'year2': 1993 };

我想创建一个像这样的数组:

ARRAY = {

          obj1 = { 
                    'id1': 1, 'name1': 'anyone1', 'birth1': 22, 'year1': 1993                  
                 },   

        obj2 = { 
                  'id2': 1, 'name2': 'anyone', 'birth2': 22, 'year2': 1993 
                }

          }

我想这样称呼它'ARRAY.obj1.id1'

我该怎么做?

【问题讨论】:

  • 这很令人困惑...为什么要将对象命名为“ARRAY”?您是否试图故意误导其他开发人员? :D
  • @Canastro,例如查看 PHP 中的关联数组。它们在那里的使用非常像我们在 JS 中使用 Object 字面量。但我同意,名字有时很重要。
  • 是的,在 php 中我们有关联数组,在 javascript 中我更喜欢称它为 map。我非常喜欢在 javascript 中使用地图,我爱上了 normalizr
  • 我这样做是因为this question,我创建了一个像this other asnwer这样的CompositeObject

标签: javascript angularjs arrays


【解决方案1】:

解决办法是用两个keys新建一个object

obj1 = { 'id1': 1, 'name1': 'anyone1', 'birth1': 22, 'year1': 1993 };

obj2 = { 'id2': 1, 'name2': 'anyone', 'birth2': 22, 'year2': 1993 };
var obj={};
obj["obj1"]=obj1;
obj["obj2"]=obj2;
console.log(obj);
console.log(obj.obj1.id1);

【讨论】:

  • 真的不应该把那个对象命名为Array。
  • 我不知道这个解决了什么问题;如果它满足 OP,很好,但是 OP 的问题是他不知道对象在 js 中是如何工作的。从技术上讲,您甚至不需要方括号和引号来使对象执行此操作。但是假设我们想出了一个名为obj["hasOwnProperty"] 的元素。这就是为什么我们在 ES6 中有 Map 类的原因,而这正是 OP 应该使用的。
  • @kfm,不要忘记接受答案以帮助其他人。
【解决方案2】:

另一个使用Object.assign的例子:

obj1 = { 'id1': 1, 'name1': 'anyone1', 'birth1': 22, 'year1': 1993 };
obj2 = { 'id2': 1, 'name2': 'anyone', 'birth2': 22, 'year2': 1993 };
var obj3 = Object.assign({}, { obj1: obj1 }, { obj2: obj2} );
console.log(obj3);

【讨论】:

    【解决方案3】:

    另外,既然是角度问题,你也可以使用angular.extend函数:

    var obj1 = { 'id1': 1, 'name1': 'anyone1', 'birth1': 22, 'year1': 1993 };
    var obj2 = { 'id2': 1, 'name2': 'anyone', 'birth2': 22, 'year2': 1993 };
    var obj3 = angular.extend({}, { obj1: obj1, obj2: obj2 } );
    console.log(obj3);
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

    【讨论】:

      【解决方案4】:

      使用

      var myNamedStuff = new Map;
      myNamedStuff.set("obj1", obj1);
      

      等等

      您要的是Map。在 ES6 之前,我们使用普通对象作为映射,但我们遇到了各种与名称冲突相关的安全风险和异常,尤其是当特定于供应商的属性出现在 Object.prototype 中时。 ES6 引入了Map,这样我们就再也不会这样做了,而是保证了我们真正想要的干净的命名空间。

      【讨论】:

        猜你喜欢
        • 2020-02-26
        • 1970-01-01
        • 2018-03-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多