JSON / JavaScript - найти совпадающие значения, превратить их в ключи и создать новый консолидированный объект - PullRequest
0 голосов
/ 25 мая 2020

В ванили JavaScript, как мне найти уникальные местоположения этого объекта и сделать их ключами, а также разместить все элементы с этим местоположением в качестве значений. (при необходимости можно установить loda sh).

Итак, это:

[
  {
    "item": {
      "id": "cat"
    },
    "location": {
      "id": "porch"
    }
  },
  {
    "item": {
      "id": "dog"
    },
    "location": {
      "id": "porch"
    }
  },
  {
    "item": {
      "id": "snake"
    },
    "location": {
      "id": "forest"
    }
  },
  {
    "item": {
      "id": "bird"
    },
    "location": {
      "id": "forest"
    }
  },
  {
    "item": {
      "id": "beer"
    },
    "location": {
      "id": "fridge"
    }
  }
]

Делается так:

[
  {
    "porch": [
      {
        "id": "cat"
      },
      {
        "id": "dog"
      }
    ]
  },
  {
    "forest": [
      {
        "id": "snake"
      },
      {
        "id": "bird"
      }
    ]
  },
  {
    "fridge": [
      {
        "id": "beer"
      }
    ]
  }
]

PEN

// изменяем желаемый результат

[
  {
    "location": {
      "name": "porch",
      "items": [
        {
          "title": "cat"
        },
        {
          "title": "dog"
        }
      ]
    }
  },
  {
    "location": {
      "name": "forest",
      "items": [
        {
          "title": "snake"
        },
        {
          "title": "bird"
        }
      ]
    }
  },
  {
    "location": {
      "name": "fridge",
      "items": [
        {
          "title": "beer"
        }
      ]
    }
  }
]

1 Ответ

1 голос
/ 25 мая 2020
let obj = [
  {
    "item": {
      "id": "cat"
    },
    "location": {
      "id": "porch"
    }
  },
  {
    "item": {
      "id": "dog"
    },
    "location": {
      "id": "porch"
    }
  },
  {
    "item": {
      "id": "snake"
    },
    "location": {
      "id": "forest"
    }
  },
  {
    "item": {
      "id": "bird"
    },
    "location": {
      "id": "forest"
    }
  },
  {
    "item": {
      "id": "beer"
    },
    "location": {
      "id": "fridge"
    }
  }
]

let result = {};

obj.forEach(({item, location}) => {
   if(!result[location.id]) result[location.id] = []
    result[location.id].push({title: item.id})
})
result = Object.keys(result).map(key => ({
    "location": {
      "name": key,
      "items": result[key]
    }
  }))

result содержит требуемый вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...