使用另一个对象的过滤器创建新对象

时间:2020-07-07 08:41:57

标签: javascript reactjs

我有一个来自后端的对象数组,如下所示:

items = [{
    id: 0
    name: "example1"
    price: 15
    sizes: [10, 12, 15.5]
    types: ["one", "two"]
  },
  {
    id: 1
    name: "example2"
    price: 15
    sizes: [10, 12, 15.5]
    types: ["one", "two"]
  }
]

我正在接收ID作为道具,并使用find()这样:

let addedItem = items.find((item) => item.id === id)

结果(对于id = 0):

addedItem = {
  id: 0
  name: "example1"
  price: 15
  sizes: [10, 12, 15.5]
  types: ["one", "two"]
}

我也获得了像type(1),size(0)这样的数据作为道具。 那么如何创建这样的新对象呢?:

item = {
  id: 0
  name: "example1"
  price: 15
  size: 10
  type: "two"
}

3 个答案:

答案 0 :(得分:1)

我只格式化新对象。

let item = items.find((item) => item.id === id)
let formattedItem = {
    id: item.id,
    name: item.name
    price: item.price
    size: item.sizes[0]
    type: item.types[0]
}

例如,我还会检查 sizes 是否为有效数组

type: item.types.length ? item[0] : null

答案 1 :(得分:1)

您不应使用硬编码的索引在客户端获取值,这应该仅在服务器端进行处理,但仍然可以,如果您希望使其工作,则可以这样做。 如果需要type [1]和size [0],则可以使用map()构造结果对象。

let addedItem = items.find((item) => item.id === id).map(x => {
     return {
        id: x.id,
        name: x.name,
        price: x.price,
        size: x.size[0],
        type: x.type[1]
     })

答案 2 :(得分:0)

好,谢谢大家。我的答案:

let item = items.find((item) => item.id === id)
let formattedItem = {
    ...item,
    size: item.sizes[size]
    type: item.types[type]
}

相关问题