在Nodejs中将数组转换为类似子的对象字符串

Convert arrays to son like string of objects in Nodejs

本文关键字:对象 字符串 Nodejs 数组 转换      更新时间:2024-06-26

我有四个数组:

var attributes = ["a","b","c","d"];
var a = [1,2,3];
var b = [34,55,66];
var c = [22,23,53];
var d = [15,78,98];

如何在Nodejs中将它们合并为一个类似json的字符串?

[{"a":1,"b":34,"c":22,"d":14},
 {"a":2,"b":55,"c":23,"d":78},
 {"a":3,"b":66,"c":53,"d":98}]

这是我的代码,但有人有更好的解决方案吗?我确实需要保留这句话。

var a = [1,2,3];
var b = [34,55,66];
var c = [22,23,53];
var d = [15,78,98];
var obj = "[";
for (var u = 0; u < a.length; u++) {
  var l = "'"a'":"+a[u]+",";
  var m = "'"b'":"+b[u]+",";
  var q = "'"b'":"+c[u]+",";
  var n = "'"d'":"+d[u]+"";
  if(u == (a.length-1))
    var k = "{" + l + m + q + n + "}";
  else
    var k = "{" + l + m + q + n + "},";
  console.log(k);
  obj = obj + k;
};
obj = obj + "]";
console.log(obj);

假设所有数组的长度相同,并对其名称进行硬编码:

   var obj = []
    for (var u = 0; u < a.length; u++) {
        obj.push({
            'a': a[u],
            'b': b[u],
            'c': c[u],
            'd': d[u]
        });
    };
    obj = JSON.stringify(obj);

EDIT:将obj转换为json字符串,问题被错误地编辑为请求数组。

这段代码将完成任务:

var arrays = [a, b, c, d]; // add all the arrays you want
var num = a.length; // or hardcode to the length you want
var result = [];
for(var i = 0; i < num; i++) {
    var element = {};
    attributes.forEach(function(attr, index) {
        element[attr] = arrays[index][i];
    });
    result.push(element);
}

var attributes = ["a","b","c","d"];
var a = [1,2,3];
var b = [34,55,66];
var c = [22,23,53];
var d = [15,78,98];
var arrays = [a, b, c, d];
var result = [];
var num = a.length;
for(var i = 0; i < num; i++) {
    var element = {};
    attributes.forEach(function(attr, index) {
        element[attr] = arrays[index][i];
    });
    result.push(element);
}
document.write(JSON.stringify(result));

var attributes = ["a","b","c","d"];
var a = [1,2,3];
var b = [34,55,66];
var c = [22,23,53];
var d = [15,78,98];
var x = [];
for (var i=0;i<3;i++) {
  var obj = {};
  for (var j=0;j<attributes.length;j++){
    obj[attributes[j]]=eval(attributes[j]+"["+i+"]");
  }
  x.push(obj);
}
console.log(x);

我知道这个问题已经有多个答案了,但似乎没有一个能将键数组作为变量来处理,这些变量的名称被引入到属性数组中。由于我假设这是属性数组的点,所以我的解决方案只是使用节点的全局作用域来实现这一点。它也没有假设所有的键数组的长度都与未指定的长度相同(即使在示例中是这样)。

var attributes = ["a","b","c","d"];
var a = [1,2,3];
var b = [34,55,66];
var c = [22,23,53];
var d = [15,78,98];
var arr = [];
while(true){
    var obj = {};
    for(var i=0;i<attributes.length;i++){
    if(global[attributes[i]].length)obj[attributes[i]]=global[attributes[i]].shift();
  }
  if(Object.keys(obj).length)
    arr.push(obj);
  else
    break;
}

在下面的fiddle中,我不得不通过手动创建一个全局数组来模拟节点的全局范围,但您明白了:

Fiddle:https://jsfiddle.net/trex005/vm1yeL5d/

重要提示如果数组实际上不在全局范围内,而是在其他对象中,则可以使用该对象来代替global