#javascript #jquery
Вопрос:
Здесь ключи могут быть динамичными. поэтому мне нужно получать значения только независимо от ключей.
var test = []
var arrayObj = [
{
"abc": {
"value": "1"
},
"def": {
"value": "TERN"
},
"aec": {
"value": "SASU"
},
"rtg": {
"value": "FI"
},
"ttyg": {
"value": "9"
},
"yty": {
"value": "uyMFG"
}
},
{
"abc": {
"value": "1"
},
"def": {
"value": "EXT"
},
"aec": {
"value": "SAM"
},
"rtg": {
"value": "FINISH"
},
"ttyg": {
"value": "5"
},
"yty": {
"value": "MFG"
}
}]
function printValues(obj) {
for (var key in obj) {
if (typeof obj[key] === "object") {
printValues(obj[key]);
} else {
test.push(obj[key])
}
}
}
printValues(arrayObj);
console.log(test);
Я получаю это
["1","TERN","SASU","FI","9","uyMFG","1","EXT","SAM","FINISH","5","MFG"]
но мне нужно получить результат, как показано ниже
[["1","TERN","SASU","FI","9","uyMFG"],["1","EXT","SAM","FINISH","5","MFG"]]
Правильно ли я поступаю или я могу найти лучший способ, чем мой подход ?
Пожалуйста, подскажите мне, как этого добиться. Я не знаю, где я ошибаюсь.
Комментарии:
1. Не уверен, что вы пытаетесь здесь сделать: даже если функция рекурсивна, она никогда не пытается отслеживать уровень рекурсии, приводя значения к одному и тому же результату, независимо от того, насколько глубоко (в парах) она находится сейчас. Вам вообще нужна рекурсия? Возможно, все обрабатываемые объекты всегда имеют одну и ту же структуру?
Ответ №1:
Если вам не особенно нужна рекурсивная функция, вы можете добиться этого с помощью некоторых Object
Array
методов и.
var arrayObj=[{abc:{value:"1"},def:{value:"TERN"},aec:{value:"SASU"},rtg:{value:"FI"},ttyg:{value:"9"},yty:{value:"uyMFG"}},{abc:{value:"1"},def:{value:"EXT"},aec:{value:"SAM"},rtg:{value:"FINISH"},ttyg:{value:"5"},yty:{value:"MFG"}}];
const output = arrayObj.map(obj => {
return Object.values(obj).map(({value}) => value)
})
console.log(output);
Ответ №2:
В простейшей форме вы можете отобразить массив и вернуть карту объекта.значения().
Это предполагает, что глубина известна (как в примере) и value
свойство согласовано
const res = arrayObj.map(e => Object.values(e).map(o => o.value))
console.log(res)
<script>
var arrayObj=[{abc:{value:"1"},def:{value:"TERN"},aec:{value:"SASU"},rtg:{value:"FI"},ttyg:{value:"9"},yty:{value:"uyMFG"}},{abc:{value:"1"},def:{value:"EXT"},aec:{value:"SAM"},rtg:{value:"FINISH"},ttyg:{value:"5"},yty:{value:"MFG"}}];
</script>
Комментарии:
1. почему вы копируете мой ответ 😉
2. Спасибо 🙂 но @Nick дал ответ первым.. поэтому принял его ответ
3. @Ник Это было опубликовано только 2 минуты спустя, так что, скорее всего, он не видел вашего ответа.
Ответ №3:
Вы не должны использовать for..in
массивы.
Используйте
for..of
на итерациях, таких как массив, строка и т. Д
Используйте
for..in
на объектах.
var arrayObj = [
{
abc: { value: "1" },
def: { value: "TERN" },
aec: { value: "SASU" },
rtg: { value: "FI" },
ttyg: { value: "9" },
yty: { value: "uyMFG" },
},
{
abc: { value: "1" },
def: { value: "EXT" },
aec: { value: "SAM" },
rtg: { value: "FINISH" },
ttyg: { value: "5" },
yty: { value: "MFG" },
},
];
var test = [];
function printValues(arr) {
for (var obj of arr) {
const temp = [];
for (let key in obj) {
temp.push(obj[key].value);
}
test.push(temp);
}
}
printValues(arrayObj);
console.log(test);
Комментарии:
1. Спасибо 🙂 но @Nick дал ответ первым.. поэтому принял его ответ