我有一个看起来与此类似的对象:
[
{"key1": ["2019-04-12-14:54:29.190", "19", "0", "4325", "1"]},
{"key2": ["2019-04-12-14:54:29.191", "20", "0", "2212", "1"]},
{"key3": ["2019-04-12-14:54:29.192", "22", "0", "4376", "0"]}
]
但是我不知道键的名称(即我不知道key1,key2和key3的名称)。
这个post几乎正是我想要的,除了该方法需要您知道键的名称。
我需要能够遍历键名及其值数组。
我已经尝试过了:
for (var i in zk) {
for (var j in zk[i]) {
console.log(j)
}
}
但是,仅打印键名。我如何也可以遍历列表?在大多数语言中,遍历j似乎是逻辑选择,但在这种情况下不是。有任何想法吗?谢谢。
答案 0 :(得分:2)
让我们继续您提供的代码示例。
1)获取每个元素的键
for (let i in zk) {
for (let j in zk[i]) {
console.log(j)
}
}
2)获取每个元素中的列表
for (let i in zk) {
for (let j in zk[i]) {
console.log(zk[i][j])
}
}
3)遍历每个元素中的每个列表
for (let i in zk) {
for (let j in zk[i]) {
for (let k = 0; k < zk[i][j].length; k++) {
console.log(zk[i][j][k])
}
}
}
或者,您可以使用Object.values,它返回每个键值对的值。您也可以考虑使用Array.map()。
for (let i in zk) {
Object.values(zk[i]).map(list => {
list.map(element => {
console.log(element);
});
});
}
答案 1 :(得分:2)
您可以采用另一种方法来迭代给定的数组和对象,
Array#forEach
用于迭代数组,
Object.entries
用于获取包含键和值以及
destructuring assignment用于键/值对的数组。
var data = [{ key1: ["2019-04-12-14:54:29.190", "19", "0", "4325", "1"] }, { key2: ["2019-04-12-14:54:29.191", "20", "0", "2212", "1"] }, { key3: ["2019-04-12-14:54:29.192", "22", "0", "4376", "0"] }];
data.forEach((object, outerIndex) =>
Object.entries(object).forEach(([key, array]) =>
array.forEach((value, innerIndex) =>
console.log(outerIndex, key, innerIndex, value)
)
)
);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 2 :(得分:1)
您错过了必须打印其值的对象
for (var i in zk) {
for (var j in zk[i]) {
console.log(zk[i][j])
}
}
答案 3 :(得分:1)
问题在于您缺少循环的一级。您必须遍历外部数组,然后遍历每个对象中的键,然后如果该键的值是该数组的数组遍历。
例如,如果要记录所有值,则可以使用Object.prototype.keys()
,它返回对象中的键数组,因此您可以尝试以下操作:
const arr = [
{"key1": ["2019-04-12-14:54:29.190", "19", "0", "4325", "1"]},
{"key2": ["2019-04-12-14:54:29.191", "20", "0", "2212", "1"]},
{"key3": ["2019-04-12-14:54:29.192", "22", "0", "4376", "0"]}
];
arr.forEach(x => {
Object.keys(x).forEach(k => {
if (Array.isArray(x[k])) {
x[k].forEach(v => {
console.log(v);
});
} else {
console.log(x[k]);
}
});
});
答案 4 :(得分:0)
Object.entries
将很有帮助。有更紧凑的方法可以执行此操作,但是嵌套循环应该清楚地说明正在发生的事情。
const arr = [
{"key1": ["2019-04-12-14:54:29.190", "19", "0", "4325", "1"]},
{"key2": ["2019-04-12-14:54:29.191", "20", "0", "2212", "1"]},
{"key3": ["2019-04-12-14:54:29.192", "22", "0", "4376", "0"]}
];
for (let obj of arr) {
for (let [key, values] of Object.entries(obj)) {
console.log(`KEY: ${key}`);
console.log('VALUES: ');
for (let value of values) {
console.log(value);
}
}
}
// Example output from first object...
// KEY: key1
// VALUES:
// 2019-04-12-14:54:29.190
// 19
// 0
// 4325
// 1
答案 5 :(得分:0)
在js中,您总是会得到密钥,因此您要做的是:
for (var i in zk) {
for (var j in zk[i]) { // j wil ben key1, key2 ect
console.log(zk[i][j]); // arrays ["2019-04-12-14:54:29.190", "19", "0", "4325", "1"] over where you can itterate
for (var k in zk[i][j]) {
console.log(zk[i][j][k]); // "2019-04-12-14:54:29.190" ect
}
}
}
答案 6 :(得分:0)
使用Object.values
:
const arr = [
{"key1": ["2019-04-12-14:54:29.190", "19", "0", "4325", "1"]},
{"key2": ["2019-04-12-14:54:29.191", "20", "0", "2212", "1"]},
{"key3": ["2019-04-12-14:54:29.192", "22", "0", "4376", "0"]}
];
arr.forEach(obj => console.log(Object.values(obj)));
.as-console-wrapper { max-height: 100% !important; top: auto; }