循环遍历对象数组中的每个元素

时间:2020-06-24 10:25:22

标签: javascript node.js object concatenation

我有一个包含如下数据的对象

int f(int i) {
  return i;
}

using f_ptr = int (*)(int);

f_ptr g(f_ptr fp) {
  return fp;
}

int main() {
  // This makes sense.
  f_ptr (*gp0)(f_ptr) = &g;

  // This is correct, although I don't get it...
  int (*(*gp1)(int (*)(int)))(int) = &g;

  // If you simply replace `f_ptr` by `int (*)(int)` as it's so defined with `using`,
  // I feel the type should become like this, which causes syntax error.
  // int (*)(int) (*gp2)(int (*)(int)) = &g;
}

我试图遍历键,并在每个键中获取和第一个元素连接每个数组中的每个元素,并使用obj = { Q1:['val1','val2'], Q2:['val3','val4','val5'], Q3:['val8'] } 将它们连接在一起(我的对象具有更多的键)

所以输出应该像

  • val1,val3,val8
  • val2,val4,
  • ,val5,

我试图遍历键并获取每个值,但我认为我在循环中遗漏了一些东西,因为如果它在每个对象中都找到了元素,我将无法更改键

这些是我下面的试验。

,

同时我希望它接近

for (var key in obj) {
  if (obj.hasOwnProperty(key)) {
    for (let i = 0; i < obj[key].length; i++) {
          console.log(obj[key][i])//This is always looping on the same key but different element          
    }
  }
}

3 个答案:

答案 0 :(得分:0)

我的解决方案使用对象的深层副本,然后通过shift()进行递归数组操作:

obj = {
  Q1:['val1','val2'],
  Q2:['val3','val4','val5'],
  Q3:['val8']
}

var resObj = [];

function printByIndex(obj){
  var newObj = JSON.parse(JSON.stringify(obj));
  printByIndexHelper(newObj, 0);
}

function printByIndexHelper(obj, i){
  var flag = false;
  resObj[i] = [];
  Object.keys(obj).forEach(function(key){
    if(obj[key].length > 0){
      resObj[i].push(obj[key].shift());
      if(obj[key].length > 0){
        flag = true;
      }
    }else{
     resObj[i].push(null);
     }
  });
  if(flag){
    printByIndexHelper(obj, i+1);
  }
}

printByIndex(obj);
console.log(resObj);

答案 1 :(得分:0)

检查与您要求相同的输出

 obj = {
    Q1:['val1','val2'],
    Q2:['val3','val4','val5'],
    Q3:['val8']
    }
    
    var keys = Object.keys(obj);
    var stack = [];
    var maxLength = getMaxLength(obj);
    
      for(var k = 0; k < 3;k ++) {
          var arr = [];
        
        for(var i = 0; i<keys.length;i++) {
          const key = keys[i];
          const elements = obj[key];
    
            if(k < elements.length) {
              arr.push(elements[k]);  
            }
        }
    
            console.log(arr+"\n");
        //stack.push(arr);
    }
    
    
    function getMaxLength(jsonObj) {
      var max;
      var jsonKeys = Object.keys(jsonObj);
      for(var key of jsonKeys) {
        const arr = jsonObj[key];
        if (max == null || arr.length > max) {
          max = arr.length;  
        } 
      }
      return max;
    }

答案 2 :(得分:0)

映射数组并连接字符串。 Math.max获得全长迭代。使用flatMap筛选出不等长的数组值。

obj = {
Q1:['val1','val2'],
Q2:['val3','val4','val5'],
Q3:['val8']
}

const o = Object.values(obj)
const len = Math.max(...o.map(({length})=>length))
console.log(
Array(len).fill().map((x,i)=>o.flatMap(q=>q[i]||[]).join(','))
)