将Javascript数组转换为JSON用户定义的键/值对

时间:2018-10-08 16:54:57

标签: javascript arrays json

我需要从文本输入中获取一个字符串,并将其从数组转换为JSON对象。

let orderInputArray = ["key1", "value1", "key2", "value2"];
let json = {}
let key,value;

orderInputArray.forEach(function(keyValue) {
  json[key] = keyValue.value;
});

let orderInputJSON = JSON.stringify(orderInputArray);

我需要它看起来像:

[{"key1": "value1"}, {"key2": "value2"}]

我不太确定该如何使用for每个循环。谁能阐明一些想法?

7 个答案:

答案 0 :(得分:2)

这不是创建对象的理想方法,但是您可以跳过键,使用当前索引(i使用键/值创建对象,然后将其推入结果({{ 1}}):

orderInputObjects

答案 1 :(得分:2)

您可以使用简单的for循环并以2而不是1递增

const orderInputArray = ["key1", "value1", "key2", "value2"];
const orderInputObjects = [];

orderInputArray.forEach(function(v, i, a) {
  if(i % 2) orderInputObjects.push({ [a[i - 1]]: v });
});

console.log(orderInputObjects);

答案 2 :(得分:1)

forEach使用回调函数,因此不能保证在代码中的let orderInputJSON = JSON.stringify(orderInputArray);之前完成。

尝试使用

var i;

for (i =0; i < orderInputArray.length; i=i+2){
//create object here using orderInputArray[i] as key and orderInputArray[i+1] as value
}

答案 3 :(得分:1)

您可以使用filter创建一个奇数和偶数数组,然后使用reduce函数创建一个对象数组

let orderInputArray = ["key1", "value1", "key2", "value2"];
let vals = orderInputArray.filter(function(item, index) {
  return index % 2 === 1

});
let keys = orderInputArray.filter(function(item, index) {
  return index % 2 === 0

}).reduce(function(acc, curr, index) {
  acc.push({
    [curr]: vals[index]
  })
  return acc
}, []);
console.log(keys)

答案 4 :(得分:1)

您也可以通过reduce进行此操作

let orderInputArray = ["key1", "value1", "key2", "value2"];
var l = orderInputArray.length;
var jsobj = orderInputArray.reduce(function(acc, v, i) {
    var o = {};
    if (i % 2 === 0 && i < l - 1) {
        o[v] = orderInputArray[i + 1];
        acc.push(o)
    }
    return acc;
}, []);
console.log(JSON.stringify(jsobj))

答案 5 :(得分:1)

这是我的解决方案:

var fruits = ["Banana", "Orange", "Apple", "Mango"];

var json = {};
while(fruits.length > 0){
    let a = fruits.splice(0,2)
    console.log(a)
    json[a[0]] = a[1]
}

console.log(json)

答案 6 :(得分:1)

let orderInputArray = ["key1", "value1", "key2", "value2"];
jsonArray = [];
orderInputArray.forEach((item, i, a)=> {if(i%2 === 0) jsonArray.push({item:a[i+1]})});

console.log(jsonArray)