Как определить конкретное значение ключа в объекте на основе значений из другого массива и с учетом последовательности массивов - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть объект с его парой ключ-значение, основанный на значении из другого массива, в котором есть только ключ, соответствующий ключу объектов.я хотел сформировать другой массив.имея в виду последовательность массива и таким же образом я хочу создать другой массив только с значениями объекта.

Я пытался использовать object.entries и использовать forEach для ввода объекта, но не смог получить желаемых результатов.

var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];

var lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}

var legendsValue = [];

Object.entries(lengendsObj).forEach(function([objKey, objValue]) {
  arrayLegends.forEach(function(value) {
    if (value === objKey ) {
      legendsValue.push(objValue);
    }
  });
});

console.log('legends value', legendsValue);

Ожидаемый результирующий массив = ['1-е посещение', '2-е посещение', '4-е посещение'];

Фактический результирующий массив = ['1-е посещение', '4-е посещение', «2-е посещение»];

Ответы [ 4 ]

0 голосов
/ 14 февраля 2019

Проверьте это:

let arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];

let lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}

var legendsValue = arrayLegends.map((key) => lengendsObj[key]);
0 голосов
/ 14 февраля 2019

Поскольку arrayLegends содержит ключи, которые вы хотите получить в legendsObj в правильном порядке, вам нужно всего лишь перебрать arrayLegends и вставить соответствующие значения в legendsValue:

var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];

var lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}

var legendsValue = [];

arrayLegends.forEach(function(value) {
  legendsValue.push(lengendsObj[value]);
});
  
console.log('legends value', legendsValue);
0 голосов
/ 14 февраля 2019

Порядок объектов не гарантируется в JavaScript .Итерирование по объекту не обязательно будет выполняться в том же порядке в независимых прогонахВместо этого перебирайте свой массив; имеет гарантированный заказ.

var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];

var legendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}

var legendsValue = [];

arrayLegends.forEach(k => {
    legendsValue.push(legendsObj[k]);
});
0 голосов
/ 14 февраля 2019

Ваш код действительно близок к получению желаемого результата, вам просто нужно использовать arrayLegends в качестве внешнего цикла и Object.entries(lengendsObj) для внутреннего цикла:

var arrayLegends = ["totalregisteredfirst","totalregisteredsecond", "totalregisteredfourth"];

var lengendsObj = {totalregisteredfirst: "1st visit", totalregisteredfourth: "4th visit", totalregisteredsecond: "2nd visit"}

var legendsValue = [];

arrayLegends.forEach(function (value) {
	Object.entries(lengendsObj).forEach(function([objKey, objValue]) {
		if (value === objKey ) {
		  legendsValue.push(objValue);
		}
	});
});

console.log('legends value', legendsValue);
...