从对象数组中获取新数组

时间:2019-02-04 13:56:42

标签: javascript arrays

我有一个数组,里面有另一个数组。

[
    [
        {
          "userId": 1,
          "title": "title 1",
        },
        {
          "userId": 2,
          "title": "title 2",
        }
    ],
    [
        {
          "userId": 3,
          "title": "title 3",
        }
    ]
]

我正在尝试仅使用userId获得一个新数组。例如。

[
  { "userId": 1 },
  { "userId": 2 },
  { "userId": 3 }
]

array.map(o => o.userId)适用于对象数组,不知道如何进入数组。

感谢您的帮助

5 个答案:

答案 0 :(得分:3)

您必须首先flat数组:

const data = [
    [
        {
          "userId": 1,
          "title": "title 1",
        },
        {
          "userId": 2,
          "title": "title 2",
        }
    ],
    [
        {
          "userId": 3,
          "title": "title 3",
        }
    ]
]

const result = data.flat().map(({userId}) => ({userId}));
console.log(result);

答案 1 :(得分:1)

Array.prototype.flat很新;万一您不能使用它,可以结合使用reducemap

const data = [
    [
        {
          "userId": 1,
          "title": "title 1",
        },
        {
          "userId": 2,
          "title": "title 2",
        }
    ],
    [
        {
          "userId": 3,
          "title": "title 3",
        }
    ]
]

const userIds = data.reduce((_, a) => {
	return _.concat(a.map(({ userId }) => ({ userId })))
}, [])

console.log(userIds)

map调用中,reduce的一个好处是您只需要遍历一次数组而不是链接。与链接数组方法相比,这在较大的数组上将具有更好的性能。

所有假设您的数据结构只有一个深度!

答案 2 :(得分:1)

另一种使用Array.reduce的浏览器that don't support Array.flat.

const data = [
  [
    {
      "userId": 1,
      "title": "title 1",
    },
    {
      "userId": 2,
      "title": "title 2",
    }
  ],
  [
    {
      "userId": 3,
      "title": "title 3",
    }
  ]
]

const result = data.reduce((arr, i) => {
  return arr.concat(i.map(({ userId }) => ({ userId })))
}, [])

console.log(result)

答案 3 :(得分:1)

您可以使用"deck0deck1"展平数组,然后使用解构和array#concat生成数组。

array#map
const data = [ [ { "userId": 1, "title": "title 1", }, { "userId": 2, "title": "title 2", } ], [ { "userId": 3, "title": "title 3", } ] ],
      result = [].concat(...data).map(({userId}) => ({userId}));
console.log(result);

答案 4 :(得分:-1)

只需将所有内容放入一个新数组中即可:)

let arr = [
    [
        {
          "userId": 1,
          "title": "title 1",
        },
        {
          "userId": 2,
          "title": "title 2",
        }
    ],
    [
        {
          "userId": 3,
          "title": "title 3",
        }
    ]
]

let newArr = []
arr.forEach(i => i.forEach(o => newArr.push(o)))
console.log(newArr.map(o => o.userId))