如何从JavaScript中的对象数组映射多个属性

时间:2018-12-11 06:55:16

标签: javascript arrays object filter javascript-objects

我有一个Object数组,如下所示:

var obj = [
  {a: 1, b: 5, c: 9},
  {a: 2, b: 6, c: 10},
  {a: 3, b: 7, c: 11},
  {a: 4, b: 8, c: 12}
];

我知道如何使用Array.map()这样获得单个对象。

var result = obj.map(x=>x.a)

这将给我以下结果

[1, 2, 3, 4]

但是我想要如下结果:

[
  {a: 1, b: 5},
  {a: 2, b: 6},
  {a: 3, b: 7},
  {a: 4, b: 8}
]

对象数组的缩写,我只想选择几个字段(一个以上)

该怎么做?

7 个答案:

答案 0 :(得分:6)

您可以将.map()Object Destructuring结合使用:

let data = [
    {a:1,b:5,c:9}, {a:2,b:6,c:10},
    {a:3,b:7,c:11}, {a:4,b:8,c:12}
];
          
let result = data.map(({ a, b }) => ({a, b}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:4)

如果像您的示例一样,要排除一个或几个特定属性,则可以使用解构并使用rest属性来创建仅包含所需属性的对象:

var obj = [
  {a:1,b:5,c:9},
  {a:2,b:6,c:10},
  {a:3,b:7,c:11},
  {a:4,b:8,c:12}
];
const mapped = obj.map(({ c, ...rest }) => rest);
console.log(mapped);

如果要 include 属性,只需从.map回调中提取它们:

var obj = [
  {a:1,b:5,c:9},
  {a:2,b:6,c:10},
  {a:3,b:7,c:11},
  {a:4,b:8,c:12}
];
const mapped = obj.map(({ a, b }) => ({ a, b }));
console.log(mapped);

答案 2 :(得分:1)

在用于生成[1,2,3,4]的解决方案中,x.a并不是某种微语法,它实际上是完整的JavaScript表达式。因此,您只需将其替换为JavaScript,即可使用所需的属性来创建新对象。

var result = obj.map(x=>{a: x.a, b: x.b});

...差不多。另一个复杂之处在于,{之后的=>被解释为函数体的开头,而不是对象文字的开头。您可以通过将对象文字包装在其他情况下的圆括号中来避免这种情况。

var result = obj.map(x=>({a: x.a, b: x.b}));

答案 3 :(得分:0)

您可以为此创建自己的自定义函数,并将要提取的一组属性传递给它。 :

var array = [{a:1,b:5,c:9}, {a:2,b:6,c:10}, {a:3,b:7,c:11}, {a:4,b:8,c:12} ];

function extractProperties(arr, properties){
  return arr.map((obj)=> Object.keys(obj).reduce((acc,key)=>{
    if(properties.has(key))    
      acc[key] = obj[key];  
    return acc;
  },{}));
}
let set = new Set(["a","b"]);
let result = extractProperties(array, set);
console.log(result);

set.add("c");
console.log("**************result2**********")
let result2 = extractProperties(array, set);
console.log(result2);

答案 4 :(得分:0)

您可以使用map()返回具有必需属性的自定义对象

var obj = [{a:1,b:5,c:9},
           {a:2,b:6,c:10},
           {a:3,b:7,c:11},
           {a:4,b:8,c:12}
          ];
          
          
let op = obj.map(e => {
   return { a:e.a, b: e.b };
})        

console.log(op);

答案 5 :(得分:0)

使用map()

var data = [
  {a:1,b:5,c:9},
  {a:2,b:6,c:10},
  {a:3,b:7,c:11},
  {a:4,b:8,c:12}
];
          
let modified = data.map(obj => ({a: obj.a, b: obj.b}))

console.log(modified);

或者,如果您希望进行销毁,则:

var data = [
    {a:1,b:5,c:9}, 
    {a:2,b:6,c:10},
    {a:3,b:7,c:11}, 
    {a:4,b:8,c:12}
];
          
let modified = data.map(({ a, b }) => ({a, b}));

console.log(modified);

答案 6 :(得分:0)

var obj = [
  {a: 1, b: 5, c: 9},
  {a: 2, b: 6, c: 10},
  {a: 3, b: 7, c: 11},
  {a: 4, b: 8, c: 12}
];

var result = obj.map(e => ({a:e.a , b:e.b}));
console.log(result)