【问题标题】:Pick the array by property name from another array从另一个数组中按属性名称选择数组
【发布时间】:2017-11-03 05:03:15
【问题描述】:

我有一个这样的数组

我想按属性名称选择数组项,为此我使用 lodash:

const result = _.map(this.thing, _.property('groups')).filter(x => x !== undefined);

但我得到了数组数组作为结果

我需要的只是单个选定的属性数组。

知道如何实现吗?

【问题讨论】:

  • 为什么要摆脱proto?

标签: javascript arrays typescript


【解决方案1】:

试试这个>>>

var a = [{"p1":[3,4]},{"p2":[6,7]}];
function getArr(arr,key){
  var res = [];
  for(var v of arr){
    if(v[key]!=undefined){
      res = v[key];break;
     }
  };
  return res;      
}
console.log(getArr(a,"p1"));

【讨论】:

    【解决方案2】:

    如果你会使用ES6/ES7,你可以依赖Object.keys和Object.values来访问key(也就是属性名)和value(你要获取的数组):

    var arr = [
    	{ groups: [1, 2 ] },
    	{ category: [1, 2, 3 ] },
    	{ subCategory: [1, 2, 3, 4 ] }
    ];
    
    function pickArray(propertyName) {
    	var element = arr.find(el => Object.keys(el)[0] === propertyName)
    	return element ? Object.values(element)[0] : null;
    }
    
    var res = pickArray('category');
    console.log(res);

    【讨论】:

      【解决方案3】:
      const output 
         = (Array.from(arr, (obj) => obj['product'], 'product')
              .filter(x => typeof x !== 'undefined'))[0];
      

      【讨论】:

        【解决方案4】:

        试试这个:

        const arr = [ {'groups': ['item1','item2']},
                      {'categories':['x','y']}
                    ]
                    
        
        
        var ouptut= arr.find(item=> { 
          return item[Object.keys(item).find(key=>key === 'groups')]
        })
        
        console.log(ouptut)

        【讨论】:

        • 谈到第二种方法,有没有办法摆脱if (key==='groups'){ console.log( item[key] },让整个事情变得有点像返回预期结果的单线?
        • 修改方法
        猜你喜欢
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 2020-03-09
        • 2020-11-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多