Chcę przekonwertować tablicę na obiekt do określonego obiektu z parą klucz-wartość.

[
    {
        "key": "out.of.stock",
        "value": "out of stock"
    },
    {
        "key": "buy.now",
        "value": "BUY NOW"
    },
    {
        "key": "notify.me",
        "value": "You'll receive an email"
    },
]

Wymagane wyjście:

{
    labels :{
        "out.of.stock" : "out of stock",
        "buy.now" : "BUY NOW",
        "notify.me": "You'll receive an email"
        }
}

Próbowałem użyć loadash (keyBy), ale dane wyjściowe są takie:

{
   "out.of.stock": {
        "key": "out.of.stock",
        "value": "out of stock"
    },
    "buy.now":{
        "key": "buy.now",
        "value": "BUY NOW"
    },
    "notify.me": {
        "key": "notify.me",
        "value": "You'll receive an email"
    },
}
0
Ritesh Kashyap 27 czerwiec 2021, 11:28

7 odpowiedzi

Najlepsza odpowiedź
const data = [
  {
    "key": "out.of.stock",
    "value": "out of stock"
  },
  {
    "key": "buy.now",
    "value": "BUY NOW"
  },
  {
    "key": "notify.me",
    "value": "You'll receive an email"
  },
]

const result = data.reduce((acc, next) => { 
  acc.labels[next.key] = next.value
  return acc
}, { labels: {} })

console.log(result)

2
Adam Orlov 27 czerwiec 2021, 08:37
const data = [
    {
      key: "out.of.stock",
      value: "out of stock",
    },
    {
      key: "buy.now",
      value: "BUY NOW",
    },
    {
      key: "notify.me",
      value: "You'll receive an email",
    },
  ];

  const obj = { label: {} };

  Object.values(data).map(({ key, value }) => {
    return (obj.label[key] = value);
  });


console.log(obj)
0
freedomn-m 27 czerwiec 2021, 09:05

Proponuję użyć metody forEach(), która wykona podaną funkcję raz dla każdego elementu tablicy. w tej funkcji wykonasz przypisanie do nowego obiektu przez zastosowanie klucza z korelacyjną wartością pod obiektem właściwości labels.

const data = [
    {
        "key": "out.of.stock",
        "value": "out of stock"
    },
    {
        "key": "buy.now",
        "value": "BUY NOW"
    },
    {
        "key": "notify.me",
        "value": "You'll receive an email"
    },
];

let obj = {"labels" :{}};
data.forEach(x => obj.labels[x.key] = x.value);

console.log(obj);
0
Ran Turner 27 czerwiec 2021, 08:51

Po prostu zrobiłbym Object.fromEntries(data.map(({key, value}) => [key, value]))

const data = [
    {
        "key": "out.of.stock",
        "value": "out of stock"
    },
    {
        "key": "buy.now",
        "value": "BUY NOW"
    },
    {
        "key": "notify.me",
        "value": "You'll receive an email"
    },
]

console.log(
    Object.fromEntries(data.map(({key, value}) => [key, value]))
)
0
dave 27 czerwiec 2021, 08:42
let a=data.map((x)=>{
   let obj={}
   obj[x.key]=x.value
   return obj
})

Możesz najpierw użyć funkcji mapy, a następnie klawisza

0
nazlikrmn 27 czerwiec 2021, 08:38

Prosty dla każdego załatwi sprawę.

    var obj = {labels:{}};
    arr.forEach(e => {
      obj.labels[e.key] = e.value;
    });
var arr = [
    {
        "key": "out.of.stock",
        "value": "out of stock"
    },
    {
        "key": "buy.now",
        "value": "BUY NOW"
    },
    {
        "key": "notify.me",
        "value": "You'll receive an email"
    },
];

var obj = {labels:{}};
arr.forEach(e => {
  obj.labels[e.key] = e.value;
});

console.log(obj);
0
David 27 czerwiec 2021, 08:32
let object;
arr.forEach((el) => {
  let object; //setup emtpy object
  arr.forEach((key, value) => { // it seems you should be using a map.
    object[key] = value; // assign the value to the key
  });
})
0
freedomn-m 27 czerwiec 2021, 09:06