2016-04-11 3 views
3

Как я могу преобразовать это:Преобразовать массив объекты в Json в Javascript

var expenseList = [[1,"Beverages"], 
        [2,"Condiments" ], 
        [3,"Confections" ], 
        [4,"Dairy Products" ], 
        [5,"Grains/Cereals" ], 
        [6,"Meat/Poultry" ], 
        [7,"Produce" ], 
        [8,"Seafood" ]]; 

в этом:

output = [ 
       { value: 1, text: "Beverages" }, 
       { value: 2, text: "Condiments" }, 
       { value: 3, text: "Confections" }, 
       { value: 4, text: "Dairy Products" }, 
       { value: 5, text: "Grains/Cereals" }, 
       { value: 6, text: "Meat/Poultry" }, 
       { value: 7, text: "Produce" }, 
       { value: 8, text: "Seafood" } 
     ]; 

Первый источник данных может быть принят в качестве входных данных, а второй является требуемой мощностью. Я попытался преобразовать массив в тип строки, используя цикл, а затем проанализировать строку в json, но Json.pasre выдает ошибку там.

var list = ''; 
for (var i = 0; i < expenseList.length; i++) { 
     var showText = expenseList[i][1].replace('"', '\\"'); 
     var key = expenseList[i][0]; 

    list = '{ value: ' + key + ', text: "' + value + '"},' + list; 
} 

    list = '[' + list.substr(0, list.length - 1) + ']'; 
    var bindList; 
    bindList = JSON.parse(list); 
+0

Попытка создать объект JSON в виде строки, очень подвержены ошибкам. – dan08

+0

В вашем требуемом выходе есть ровно 0 (ноль) «объекты JSON». Или что-то еще отдаленно JSON-связанное в этом отношении. –

ответ

7

просто попробовать

var output = expenseList.map(function(val){ 
    return { value: val[0], text: val[1] } 
}); 
1

Вы можете использовать Array.prototype.map

var list = expenseList.map(function(x) { 
    return { 
    value: x[0], 
    text: x[1] 
    }; 
}); 

Чтобы затем превратиться в JSON можно использовать

var json = JSON.stringify(output); 
0

Вот альтернативное решение, что создает массив i n то, как вы пытались, но вернее:

var expenseList = [[1,"Beverages"], 
        [2,"Condiments" ], 
        [3,"Confections" ], 
        [4,"Dairy Products" ], 
        [5,"Grains/Cereals" ], 
        [6,"Meat/Poultry" ], 
        [7,"Produce" ], 
        [8,"Seafood" ]]; 

var list = []; 
for (var i = 0; i < expenseList.length; i++) { 
    var val = expenseList[i][0];  
    var txt = expenseList[i][1]; 

    list.push({value: val, text: txt}); 
} 

console.log(list); 
0

Если вы не хотите, чтобы массив и хэш-объект соответствовали вашему требованию, используйте это.

loadash б/у.

_.zipObject(_.map(expenseList,0),_.map(expenseList,1)) 

Выход будет

{1: "Beverages", 2: "Condiments", 3: "Confections", 4: "Dairy Products", 5: "Grains/Cereals", 6: "Meat/Poultry", 7: "Produce", 8: "Seafood"} 
Смежные вопросы