【问题标题】:Separate and assign objects to variable from an array从数组中分离对象并将其分配给变量
【发布时间】:2018-02-26 09:20:17
【问题描述】:

我有以下需要循环的数组:

var arr = [{
  "id": 111,
  "wbs_name": "Mechanical",
  "parent": 'root',
}, {
  "id": 222,
  "wbs_name": "Electrical",
  "parent": 111,
}, {
  "id": 333,
  "wbs_name": "Systems",
  "parent": 111,
},]

我的输出应该是这样的:

 var mechanical = {
     "id": 111,
     "wbs_name": "mechanical",
     "parent": 0,
 },

 var electrical= {
     "id": 222,
     "wbs_name": "electrical",
     "parent": mechanical,
 },

 var systems = {
     "id": 222,
     "wbs_name": "systems",
     "parent": mechanical,
 },

我已经尝试循环遍历数组并将对象推入另一个,但我不知道如何将它们同时分配给一个变量(其中变量名称是“wbs_name”而“父”是其他父对象的变量名。

【问题讨论】:

  • arr.forEach( s => { window[s.wbs_name] = s; } )
  • @gurvinder372 这是我正在寻找的代码。谢谢!
  • 我也添加了相同的答案。

标签: javascript arrays javascript-objects


【解决方案1】:

试试这个,

var mechanical = filterList('Mechanical');
var electrical = filterList('Electrical');
var systems = filterList('Systems');
function filterList(filterBy){
    return arr.filter((ad)=>{
        return ad.wbs_name == filterBy;
    })[0];
};
console.log(mechnical);
console.log(electrical);
console.log(systems);

将得到 o/p 为 -

"mechnical"= {
  id: 111, 
  wbs_name: "Mechanical", 
  parent: "root"
}

【讨论】:

    【解决方案2】:

    虽然不推荐污染全局作用域,你可以使用下面的

    arr.forEach( s => { window[s.wbs_name] = s; } )
    

    此代码将为数组中每个对象的每个id 属性创建一个全局级别变量。

    【讨论】:

      【解决方案3】:

      浏览器中的varwindow 对象的一部分。我们可以像这样动态分配它:

      window['my-arbitrary-string'] = arbitrary_value
      

      【讨论】:

        【解决方案4】:

        您不能动态声明不同的变量,但是您可以拥有一个对象并分配给它的属性。然后您可以使用object destructing 单独获取属性

        const root = {};
        
        const arr = [{
           "id": 111,
           "wbs_name": "Mechanical",
           "parent": 'root',
        }, {
           "id": 222,
           "wbs_name": "Electrical",
           "parent": 111,
        }, {
           "id": 333,
           "wbs_name": "Systems",
           "parent": 111,
        }];
        
        arr.forEach(item => root[item.wbs_name.toLowerCase()] = Object.assign({}, item));
        
        const { mechanical, electrical, systems } = root;
        console.log(mechanical);
        console.log(electrical);
        console.log(systems);

        【讨论】:

          【解决方案5】:

          您可以使用Object.assignarray.prototype.map

          var arr = [
              {"id": 111, "wbs_name": "Mechanical", "parent": 'root'},
              {"id": 222, "wbs_name": "Electrical", "parent": 111},
              {"id": 333, "wbs_name": "Systems", "parent": 111}
          ];
          
          var { mechanical, electrical, systems} = Object.assign({}, ...arr.map(e => { 
            var parent = arr.find(i => i.id === e.parent);  
            return { [e.wbs_name.toLowerCase()] : {...e, parent: parent ? parent.wbs_name.toLowerCase() : 0 } };
           }));
           
           console.log("mechanical: ", mechanical);
           console.log("electrical: ", electrical);
           console.log("systems: ", systems);

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2016-09-18
            • 2020-02-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-09-19
            • 1970-01-01
            相关资源
            最近更新 更多