как поместить значение ключа в объекте в массиве на основе порядка другого массива с простым JavaScript - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть массив значений, которые соответствуют ключам объекта в объекте.Массив значений имеет порядок, в котором значения ключей должны быть в зависимости от ключей (которые, опять же, соответствуют значениям массива).Мне нужно упорядочить значения ключей на основе порядка блоков в массиве.

Вот объект:

var Payload = { 
BL_0GHahOV7Hb9l141: {questions0: "QID4", questions1: "QID17"},
BL_0SuWoa7K2CkYFsV: {questions0: "QID39", questions1: "QID38"},
BL_0r1ZjeAhMBEBhdz: {questions0: "QID9", questions1: "QID7", questions2: "QID12", questions3: "QID11"},
BL_1Mk6LuLiukBnCU5: {questions0: "QID14"},
BL_2lVBP4EOiOwT0Kp: {questions0: "QID30", questions1: "QID31"},
BL_2tA1Ilad6iCEEu1: {questions0: "QID5", questions1: "QID18"},
BL_4IMpxjrEATyLuqV: {questions0: "QID13"},
BL_4NL909leoyn5KBf: {questions0: "QID44"},
BL_4Yhl7MpygFG9Z6B: {questions0: "QID36"},
BL_6ilSpb6iiCzWvtz: {questions0: "QID27", questions1: "QID24"},
BL_9ESRPcpuMl5TNcx: {questions0: "QID45"},
BL_a4faBNVnTi19wLr: {questions0: "QID29", questions1: "QID32"},
BL_bBGbASH2RnPCskt: {questions0: "QID43", questions1: "QID42", questions2: "QID41", questions3: "QID40", questions4: "QID34"},
BL_bBjaPeuYnHFtBBP: {questions0: "QID16", questions1: "QID15"},
BL_cACgbdijKOAtRo9: {questions0: "QID46"},
BL_eD0WiECJYD2l0nr: {questions0: "QID33"}
}

Вот массив:

 var Array =  ["BL_4NL909leoyn5KBf", "BL_bBGbASH2RnPCskt", "BL_4Yhl7MpygFG9Z6B",
"BL_0GHahOV7Hb9l141", "BL_3n1Vmp4FL6cZZuR", "BL_9ESRPcpuMl5TNcx",
"BL_cACgbdijKOAtRo9", "BL_0SuWoa7K2CkYFsV", "BL_2tA1Ilad6iCEEu1",
"BL_0r1ZjeAhMBEBhdz", "BL_6ilSpb6iiCzWvtz", "BL_a4faBNVnTi19wLr", 
"BL_2lVBP4EOiOwT0Kp", "BL_4IMpxjrEATyLuqV", "BL_bBjaPeuYnHFtBBP", 
"BL_eD0WiECJYD2l0nr", "BL_1Mk6LuLiukBnCU5"]

Обратите внимание, что значения массива соответствуют ключам объекта.Значения объектов должны быть в том же порядке, что и значения массивов, чтобы их значения были в правильном порядке.

Я попробовал следующее, но я просто заканчиваю массивом блоков снова.

var ArrayOfQuestionOrder = []
for( i=0;i<Array.length;i++){

    if(Payload.hasOwnProperty(Array[i])){
        var objectKeys = Object.keys(Payload)
        var index = objectKeys.indexOf(Array[i])
        var OrderOfKeys = Object.keys(Payload)[index]
        ArrayOfQuestionOrder.push(OrderOfKeys);

    }

}console.log(ArrayOfQuestionOrder)  

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

["QID44","QID43","QID42",...]

1 Ответ

0 голосов
/ 23 декабря 2018

Вы можете map keyArr до Object.values связанного объекта в payload, а затем сгладить массив:

var Payload={BL_0GHahOV7Hb9l141:{questions0:"QID4",questions1:"QID17"},BL_0SuWoa7K2CkYFsV:{questions0:"QID39",questions1:"QID38"},BL_0r1ZjeAhMBEBhdz:{questions0:"QID9",questions1:"QID7",questions2:"QID12",questions3:"QID11"},BL_1Mk6LuLiukBnCU5:{questions0:"QID14"},BL_2lVBP4EOiOwT0Kp:{questions0:"QID30",questions1:"QID31"},BL_2tA1Ilad6iCEEu1:{questions0:"QID5",questions1:"QID18"},BL_4IMpxjrEATyLuqV:{questions0:"QID13"},BL_4NL909leoyn5KBf:{questions0:"QID44"},BL_4Yhl7MpygFG9Z6B:{questions0:"QID36"},BL_6ilSpb6iiCzWvtz:{questions0:"QID27",questions1:"QID24"},BL_9ESRPcpuMl5TNcx:{questions0:"QID45"},BL_a4faBNVnTi19wLr:{questions0:"QID29",questions1:"QID32"},BL_bBGbASH2RnPCskt:{questions0:"QID43",questions1:"QID42",questions2:"QID41",questions3:"QID40",questions4:"QID34"},BL_bBjaPeuYnHFtBBP:{questions0:"QID16",questions1:"QID15"},BL_cACgbdijKOAtRo9:{questions0:"QID46"},BL_eD0WiECJYD2l0nr:{questions0:"QID33"}};
var keyArr=["BL_4NL909leoyn5KBf","BL_bBGbASH2RnPCskt","BL_4Yhl7MpygFG9Z6B","BL_0GHahOV7Hb9l141","BL_3n1Vmp4FL6cZZuR","BL_9ESRPcpuMl5TNcx","BL_cACgbdijKOAtRo9","BL_0SuWoa7K2CkYFsV","BL_2tA1Ilad6iCEEu1","BL_0r1ZjeAhMBEBhdz","BL_6ilSpb6iiCzWvtz","BL_a4faBNVnTi19wLr","BL_2lVBP4EOiOwT0Kp","BL_4IMpxjrEATyLuqV","BL_bBjaPeuYnHFtBBP","BL_eD0WiECJYD2l0nr","BL_1Mk6LuLiukBnCU5"]

const output = keyArr
  .map(key => Object.values(Payload[key] || {}))
  .flat();
console.log(output);

Другой подход без нового метода flat заключался бы в reduce в выходном массиве вместо:

var Payload={BL_0GHahOV7Hb9l141:{questions0:"QID4",questions1:"QID17"},BL_0SuWoa7K2CkYFsV:{questions0:"QID39",questions1:"QID38"},BL_0r1ZjeAhMBEBhdz:{questions0:"QID9",questions1:"QID7",questions2:"QID12",questions3:"QID11"},BL_1Mk6LuLiukBnCU5:{questions0:"QID14"},BL_2lVBP4EOiOwT0Kp:{questions0:"QID30",questions1:"QID31"},BL_2tA1Ilad6iCEEu1:{questions0:"QID5",questions1:"QID18"},BL_4IMpxjrEATyLuqV:{questions0:"QID13"},BL_4NL909leoyn5KBf:{questions0:"QID44"},BL_4Yhl7MpygFG9Z6B:{questions0:"QID36"},BL_6ilSpb6iiCzWvtz:{questions0:"QID27",questions1:"QID24"},BL_9ESRPcpuMl5TNcx:{questions0:"QID45"},BL_a4faBNVnTi19wLr:{questions0:"QID29",questions1:"QID32"},BL_bBGbASH2RnPCskt:{questions0:"QID43",questions1:"QID42",questions2:"QID41",questions3:"QID40",questions4:"QID34"},BL_bBjaPeuYnHFtBBP:{questions0:"QID16",questions1:"QID15"},BL_cACgbdijKOAtRo9:{questions0:"QID46"},BL_eD0WiECJYD2l0nr:{questions0:"QID33"}};
var keyArr=["BL_4NL909leoyn5KBf","BL_bBGbASH2RnPCskt","BL_4Yhl7MpygFG9Z6B","BL_0GHahOV7Hb9l141","BL_3n1Vmp4FL6cZZuR","BL_9ESRPcpuMl5TNcx","BL_cACgbdijKOAtRo9","BL_0SuWoa7K2CkYFsV","BL_2tA1Ilad6iCEEu1","BL_0r1ZjeAhMBEBhdz","BL_6ilSpb6iiCzWvtz","BL_a4faBNVnTi19wLr","BL_2lVBP4EOiOwT0Kp","BL_4IMpxjrEATyLuqV","BL_bBjaPeuYnHFtBBP","BL_eD0WiECJYD2l0nr","BL_1Mk6LuLiukBnCU5"]

const output = keyArr.reduce((a, key) => {
  if (Payload[key]) {
    a.push(...Object.values(Payload[key]));
  }
  return a;
}, []);
console.log(output);

Или, если вы используете старый браузер, который не поддерживает ES2015, вы можете concat:

var Payload={BL_0GHahOV7Hb9l141:{questions0:"QID4",questions1:"QID17"},BL_0SuWoa7K2CkYFsV:{questions0:"QID39",questions1:"QID38"},BL_0r1ZjeAhMBEBhdz:{questions0:"QID9",questions1:"QID7",questions2:"QID12",questions3:"QID11"},BL_1Mk6LuLiukBnCU5:{questions0:"QID14"},BL_2lVBP4EOiOwT0Kp:{questions0:"QID30",questions1:"QID31"},BL_2tA1Ilad6iCEEu1:{questions0:"QID5",questions1:"QID18"},BL_4IMpxjrEATyLuqV:{questions0:"QID13"},BL_4NL909leoyn5KBf:{questions0:"QID44"},BL_4Yhl7MpygFG9Z6B:{questions0:"QID36"},BL_6ilSpb6iiCzWvtz:{questions0:"QID27",questions1:"QID24"},BL_9ESRPcpuMl5TNcx:{questions0:"QID45"},BL_a4faBNVnTi19wLr:{questions0:"QID29",questions1:"QID32"},BL_bBGbASH2RnPCskt:{questions0:"QID43",questions1:"QID42",questions2:"QID41",questions3:"QID40",questions4:"QID34"},BL_bBjaPeuYnHFtBBP:{questions0:"QID16",questions1:"QID15"},BL_cACgbdijKOAtRo9:{questions0:"QID46"},BL_eD0WiECJYD2l0nr:{questions0:"QID33"}};
var keyArr=["BL_4NL909leoyn5KBf","BL_bBGbASH2RnPCskt","BL_4Yhl7MpygFG9Z6B","BL_0GHahOV7Hb9l141","BL_3n1Vmp4FL6cZZuR","BL_9ESRPcpuMl5TNcx","BL_cACgbdijKOAtRo9","BL_0SuWoa7K2CkYFsV","BL_2tA1Ilad6iCEEu1","BL_0r1ZjeAhMBEBhdz","BL_6ilSpb6iiCzWvtz","BL_a4faBNVnTi19wLr","BL_2lVBP4EOiOwT0Kp","BL_4IMpxjrEATyLuqV","BL_bBjaPeuYnHFtBBP","BL_eD0WiECJYD2l0nr","BL_1Mk6LuLiukBnCU5"]

var output = keyArr.reduce(function(a, key) {
  if (Payload[key]) {
    return a.concat(Object.values(Payload[key]));
  }
  return a;
}, []);
console.log(output);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...