Javascript 如何迭代数组字典(不知道键名)
我有一个类似于此的对象:Javascript 如何迭代数组字典(不知道键名),javascript,arrays,object,Javascript,Arrays,Object,我有一个类似于此的对象: [ {"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"]} ] 但是,我不知道钥匙的名称,即我不知道钥匙1、钥匙2和钥匙3的名称
[
{"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"]}
]
但是,我不知道钥匙的名称,即我不知道钥匙1、钥匙2和钥匙3的名称
这几乎正是我想要的,只是该方法要求您知道键的名称
我需要能够遍历键名及其值数组
我试过这个:
for (var i in zk) {
for (var j in zk[i]) {
console.log(j)
}
}
但那只会打印出密钥名。我怎样才能遍历列表呢?在大多数语言中,在j上迭代似乎是合乎逻辑的选择,但在本例中并非如此。有什么想法吗?谢谢。您错过了必须打印其值的对象
for (var i in zk) {
for (var j in zk[i]) {
console.log(zk[i][j])
}
}
您错过了必须打印其值的对象
for (var i in zk) {
for (var j in zk[i]) {
console.log(zk[i][j])
}
}
让我们从您提供的代码示例继续 1获取每个元素的键
for (let i in zk) {
for (let j in zk[i]) {
console.log(j)
}
}
for (let i in zk) {
for (let j in zk[i]) {
console.log(zk[i][j])
}
}
2获取每个元素中的列表
for (let i in zk) {
for (let j in zk[i]) {
console.log(j)
}
}
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])
}
}
}
让我们从您提供的代码示例继续 1获取每个元素的键
for (let i in zk) {
for (let j in zk[i]) {
console.log(j)
}
}
for (let i in zk) {
for (let j in zk[i]) {
console.log(zk[i][j])
}
}
2获取每个元素中的列表
for (let i in zk) {
for (let j in zk[i]) {
console.log(j)
}
}
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])
}
}
}
如果您尝试迭代并输出每个对象键和相应数组中的每个值,这将非常有用。有更简洁的方法可以做到这一点,但是嵌套循环应该清楚地说明发生了什么
常数arr=[
{key1:[2019-04-12-14:54:29.190,19,04325,1]},
{key2:[2019-04-12-14:54:29.191,20,02212,1]},
{key3:[2019-04-12-14:54:29.192,22,04376,0]}
];
对于arr的let obj{
对于Object.entriesobj的let[key,values]{
log`KEY:${KEY}`;
console.log'VALUES:';
对于值的let值{
console.logvalue;
}
}
}
//第一个对象的输出示例。。。
//键:键1
//价值观:
// 2019-04-12-14:54:29.190
// 19
// 0
// 4325
//如果您试图迭代并输出每个对象键和相应数组中的每个值,则1将非常有用。有更简洁的方法可以做到这一点,但是嵌套循环应该清楚地说明发生了什么
常数arr=[
{key1:[2019-04-12-14:54:29.190,19,04325,1]},
{key2:[2019-04-12-14:54:29.191,20,02212,1]},
{key3:[2019-04-12-14:54:29.192,22,04376,0]}
];
对于arr的let obj{
对于Object.entriesobj的let[key,values]{
log`KEY:${KEY}`;
console.log'VALUES:';
对于值的let值{
console.logvalue;
}
}
}
//第一个对象的输出示例。。。
//键:键1
//价值观:
// 2019-04-12-14:54:29.190
// 19
// 0
// 4325
//1在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
}
}
}
在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
}
}
}
使用Object.Value:
常数arr=[
{key1:[2019-04-12-14:54:29.190,19,04325,1]},
{key2:[2019-04-12-14:54:29.191,20,02212,1]},
{key3:[2019-04-12-14:54:29.192,22,04376,0]}
];
arr.forEachobj=>console.logObject.valuesobj;
.作为控制台包装{最大高度:100%!重要;顶部:自动;}使用对象。值:
常数arr=[
{key1:[2019-04-12-14:54:29.190,19,04325,1]},
{key2:[2019-04-12-14:54:29.191,20,02212,1]},
{key3:[2019-04-12-14:54:29.192,22,04376,0]}
];
arr.forEachobj=>console.logObject.valuesobj;
.as console wrapper{max height:100%!important;top:auto;}问题是您缺少一个级别的循环。必须在外部数组上循环,然后在每个对象中的键上循环,如果该键的值是数组,则在该数组上循环 例如,若要记录所有值,则可以使用Object.prototype.keys返回对象中的键数组,以便您可以尝试以下操作: 常数arr=[ {key1:[2019-04-12-14:54:29.190,19,04325,1]}, {key2:[2019-04-12-14:54:29.191,20,02212,1]}, {key3:[2019-04-12-14:54:29.192,22,04376,0]} ]; arr.forEachx=>{ Object.keysx.forEachk=>{ if Array.isArrayx[k]{ x[k]。forEachv=>{ console.logv; }; }否则{ console.logx[k]; } };
}; 问题是您缺少一个循环级别。必须在外部数组上循环,然后在每个对象中的键上循环,如果该键的值是数组,则在该数组上循环 例如,若要记录所有值,则可以使用Object.prototype.keys返回对象中的键数组,以便您可以尝试以下操作: 常数arr=[ {key1:[2019-04-12-14:54:29.190,19,04325,1]}, {key2:[2019-04-12-14:54:29.191,20,02212,1]}, {key3:[2019-04-12-14:54:29.192,22,04376,0]} ]; arr.forEachx=>{ Object.keysx.forEachk=>{ if Array.isArrayx[k]{ x[k]。forEachv=>{ console.logv; }; }否则{ console.logx[k]; } }; }; 你可以采取不同的做法 迭代给定数组和对象的etn方法,使用 对于迭代数组 用于获取包含键和值的数组数组以及 用于键/值对数组 var数据=[{key1:[2019-04-12-14:54:29.190,19,04325,1]},{key2:[2019-04-12-14:54:29.191,20,02212,1]},{key3:[2019-04-12-14:54:29.192,22,0476,0]}; data.forEachobject,outerIndex=> Object.entriesobject.forEach[键,数组]=> array.forEachvalue,innerIndex=> console.LogoutIndex,键,innerIndex,值 ;
.作为控制台包装器{max height:100%!important;top:0;}您可以采用不同的方法来迭代给定的数组和对象,使用 对于迭代数组 用于获取包含键和值的数组数组以及 用于键/值对数组 var数据=[{key1:[2019-04-12-14:54:29.190,19,04325,1]},{key2:[2019-04-12-14:54:29.191,20,02212,1]},{key3:[2019-04-12-14:54:29.192,22,0476,0]}; data.forEachobject,outerIndex=> Object.entriesobject.forEach[键,数组]=> array.forEachvalue,innerIndex=> console.LogoutIndex,键,innerIndex,值 ;
.as控制台包装{max height:100%!important;top:0;}zk[i][j]是数组吗?但实际上,您应该更改数据结构,或者使用对象数组,或者使用一个带键的对象进行查找,而不是同时使用这两个键。您可以使用for..of来迭代值,而不是使用key thing.mapObject.values或thing.flatMapObject.values或thing.flatMapObject.values.flat,具体取决于您想要它的方式。zk[i][j]是数组吗?但实际上,您应该更改数据结构,或者使用对象数组,或者使用一个带键的对象进行查找,而不是同时使用这两个键。您可以使用for..of来迭代值,而不是使用key thing.mapObject.values或thing.flatMapObject.values或thing.flatMapObject.values.flat,具体取决于您想要它的方式。