изменение ключей объекта в соответствии с массивом - PullRequest
3 голосов
/ 28 мая 2019

у меня есть объект и 2 массива.я хочу изменить object ключи в соответствии с arr2, ключи объекта и значения arr1 идентичны, в то время как arr1 и arr2 размещения значений в массивах идентичны, но не сами значения, в то время как я не хочуСпросите, как ее решить Хотите узнать, как я должен подойти к этой проблеме, спасибо за ваше время

    const object = {
        name1: "some value",
        name3: "some value",
        name2: "some value",
        etc...}
    const arr1 = ["name1", "name2", "name3"]
    const arr2 = ["Name1", "Name2", "Name3"]

Ожидаемый результат

    const newObject = {
        Name1: "some value",
        Name3: "some value",
        Name2: "some value",
        etc...}

Ответы [ 6 ]

6 голосов
/ 28 мая 2019

Я предполагаю, что вы отображаете их по позициям в ваших arr1 и arr2. Просто запустите цикл.

 const oldObject = {
        name1: "some value",
        name3: "some value",
        name2: "some value",
};

const arr1 = ["name1", "name2", "name3"];
const arr2 = ["Name1", "Name2", "Name3"];

var newObj = {};

for (var i = 0; i < arr2.length; i++) {
  newObj[arr2[i]] = oldObject[arr1[i]];
}

console.log(newObj);
3 голосов
/ 28 мая 2019

Вы можете использовать уменьшить:

const object = {
  name1: "some value",
  name3: "some value",
  name2: "some value",
}
const arr1 = ["name1", "name2", "name3"]
const arr2 = ["Name1", "Name2", "Name3"]

const newObj = arr1.reduce((acc, value, index) => {
   acc[arr2[index]] = object[value]
   return acc
}, {})

console.log(newObj)

Reduce зацикливает массив 1, использует тот же индекс из второго массива для назначения ключа и сравнивает значение из первого массива с ключом из объектаи затем назначьте его новому объекту.

3 голосов
/ 28 мая 2019

Вы можете использовать reduce()

const object = {
        name1: "some value",
        name3: "some value",
        name2: "some value"
}

const arr1 = ["name1", "name2", "name3"]
const arr2 = ["Name1", "Name2", "Name3"]

const res = arr1.reduce((ac,a,i) => (ac[arr2[i]] = object[a],ac),{});
console.log(res)
2 голосов
/ 28 мая 2019

Вы можете просто сделать это:

var output={};
arr1.forEach(function(el, index){
   output[arr2[index]] = object[el];
}, this);
1 голос
/ 28 мая 2019

Вы можете сделать одну строку через Array.map , а затем Object.fromEntries :

  const object = {
    name1: "some value A",
    name3: "some value B",
    name2: "some value C"
  }
  const old = ["name1", "name2", "name3"]
  const keys = ["Name1", "Name2", "Name3"]

let result = Object.fromEntries(old.map((x,i) => [keys[i], object[x]]))

console.log(result)
1 голос
/ 28 мая 2019

Если вы хотите сохранить имена ключей, отсутствующие в arr1, для нового объекта. Затем вы можете сначала создать карту между старыми именами и новыми именами (Если ES6 не подходит для вас, используйте здесь объект для отображение). Затем вы можете пройти Object.entries () с помощью Array.reduce () , чтобы сгенерировать новый объект, в котором только связанные имена ключей сопоставляются с новыми, а остальные сохраняется.

const obj = {
  name1: "some value 1",
  name3: "some value 2",
  name2: "some value 3",
  name4: "some value 4",
  name5: "some value 5"
}

const arr1 = ["name1", "name2", "name3"];
const arr2 = ["Name1", "Name2", "Name3"];

// Create a map between old names and new names.
let keysMap = new Map(arr1.map((key, idx) => [key, arr2[idx]]));

// Generate the new object, preserving non-mapped keys names.
let newObj = Object.entries(obj).reduce((acc, [k, v]) =>
{
    acc[keysMap.has(k) ? keysMap.get(k) : k] = v;
    return acc;
}, {});

console.log(newObj);
.as-console {background-color:black !important; color:lime;}
.as-console-wrapper {max-height:100% !important; top:0;}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...