To jest moja początkowa tablica:

[ 
   { 
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
   },
  { 
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  } 
]

Moje pożądane wyjście:

{
   pos123: {
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
  },
  tailor123: {
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  },
}

Próbowałem tego robić za pomocą map, ale nie mogłem tego zrozumieć. Czy powinienem tutaj używać reduce?

0
Mohamed Sameer 4 czerwiec 2018, 09:09

6 odpowiedzi

Najlepsza odpowiedź

Twoja wydajność nie jest tablicą - to obiekt, więc musisz użyć reduce. Możesz użyć tylko map, aby obrócić liczbę elementów w tablicy do x numerów elementów w innej tablicy.

const input=[{id:1,name:'pos',code:'pos123',appCode:22,},{id:2,name:'tailor',code:'tailor123',appCode:21,}]
const output = input.reduce((a, obj) => {
  a[obj.code] = obj;
  return a;
}, {});
console.log(output);
3
CertainPerformance 4 czerwiec 2018, 06:18
var yourArray = [ 
 { 
  id: 1,
  name: 'pos',
  code: 'pos123',
  appCode: 22,
  },
 {  
  id: 2,
  name: 'tailor',
  code: 'tailor123',
  appCode: 21,
 } 
];

//this is what you required
var output =  yourArray.reduce((obj, item) => {
  obj[code] =item;
  return obj;
}, {});
1
Dhaval Chaudhary 4 czerwiec 2018, 06:14

Możesz użyć Object.assign mapowania tablicy do oczekiwanego kształtu kluczy i wartości. Próbować:

let array = [ 
   { 
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
   },
  { 
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  } 
];

let output = Object.assign(...array.map(x => ({ [x.code]: x })));

console.log(output);
1
mickl 4 czerwiec 2018, 06:25

Użyj tablicy Zmniejsz funkcję

var data = [{
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
  },
  {
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  }
]

var modData = data.reduce(function(acc, curr) {
  //acc is the empty array passed as argument
  // if empty array does not have a property pos123 or so 
  // create a key by this name
  if (!acc.hasOwnProperty(curr.code)) {
    // then add property to it
    acc[curr.code] = {
      id: curr.id,
      name: curr.name,
      appCode: curr.appCode
    }
  }

  return acc;

}, {})

console.log(modData)
0
brk 4 czerwiec 2018, 06:15

Używanie pętli możesz to zrobić.

const resp = [
   {
    id: 1,
    name: 'pos',
    code: 'pos123',
    appCode: 22,
   },
  {
    id: 2,
    name: 'tailor',
    code: 'tailor123',
    appCode: 21,
  }
]

let res = {};

for (let i = 0; i < resp.length; i++) {
  res[resp[i]['code']] = {
    id: resp[i]['id'],
    name: resp[i]['name'],
    appCode: resp[i]['appCode'],
    code: resp[i]['code']
  }
}

console.log(res);
0
Matus Dubrava 4 czerwiec 2018, 06:18

Wydaje się, że inne rozwiązania obejmują "Nieruchomość" w uzyskanym obiekcie. Ten nie

const test = [ 
  { 
   id: 1,
   name: 'pos',
   code: 'pos123',
   appCode: 22,
  }, { 
   id: 2,
   name: 'tailor',
   code: 'tailor123',
   appCode: 21,
  } 
];
const test2 = JSON.parse(JSON.stringify(test));
const result = document.querySelector("#result");

result.textContent = "**No redundancy\n" + JSON.stringify(
  test.reduce( (newObj, el) => 
    (newObj[el.code] = delete el.code && el) && newObj, {} 
  ), null, " ");

// alternative
result.textContent += "\n\n**Alternative\n" + JSON.stringify(
  test2.reduce( (newObj, el) => (newObj[el.code] = el) && newObj, {}
  ), null, " ");
<pre id="result"></pre>
0
KooiInc 4 czerwiec 2018, 06:47