Ответ 1
Предполагая, что оба массива всегда имеют одинаковую длину:
var obj = {}
for (var i = 0; i < a.length; i++) {
//or check with: if (b.length > i) { assignment }
obj[a[i]] = b[i]
}
У меня есть массив данных. В a
имеется 10 полей, а в b
имеется 10 полей
var a = [ "siddharth", "sid", "anything", "something", "nothing", ]
var b = [ "23", "67", "10", "10", "90" ]
Я пытаюсь создать JSON
из этих массивов как a
в качестве ключа и b
как значения, как показано ниже:
{ "siddharth" : "23", "sid" : "67" }
Как я могу достичь этого, используя javascript
или jquery
. Мой текущий код
var convert = '{'+datatest.columnHeaders[i].name +":"+datatest.rows[0][i]+'}';
pair = convert;/*JSON.stringify(convert);*/
array.pairArray.push(pair);
Предполагая, что оба массива всегда имеют одинаковую длину:
var obj = {}
for (var i = 0; i < a.length; i++) {
//or check with: if (b.length > i) { assignment }
obj[a[i]] = b[i]
}
var a = [ "siddharth", "sid", "anything", "something", "nothing" ];
var b = [ "23", "67", "10", "10", "90" ];
var c = {};
$.each( a, function(i,v) {
c[ v ] = b[ i ];
});
$('body').append( JSON.stringify(c) );
//Output: {"siddharth":"23","sid":"67","anything":"10","something":"10","nothing":"90"}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
Этот пример равен примеру tymeJVs, но использует цикл forEach для массива. Для меня это выглядит короче.
var obj = {};
a.forEach(function(item, i) {
obj[item] = b[i];
});
console.log(JSON.stringify(obj)); // {"siddharth":"23","sid":"67","anything":"10","something":"10","nothing":"90"}
Вы можете создать простой объект и использовать его в качестве контейнера сопоставления:
var a = [ "siddharth", "sid", "anything", "something", "nothing" ];
var b = [ "23", "67", "10", "10", "90" ];
var obj = {};
for ( i = 0; i < a.length; i++) {
obj[a[i]] = b[i];
}
alert(JSON.stringify(obj));
Подробнее о создании хеша или словарного объекта в JavaScript см.
Вам понадобятся кавычки вокруг имени и значения, иначе вы получите строку типа {siddharth:23,sid:67}
:
// mock the data
var datatest = {
columnHeaders: [ { name: "siddharth" }, { name: "sid" }, { name: "anything" }, { name: "something" }, { name: "nothing" } ],
rows: [[ "23", "67", "10", "10", "90" ]]
};
var json = '{';
for (var i = 0; i < datatest.columnHeaders.length; i++) {
if (i > 0) json += ',';
json += '"' + datatest.columnHeaders[i].name + '":"' + datatest.rows[0][i] +'"';
}
json += '}';
// show result in StackOverflow snippet
document.write(json);
Кратчайший я могу получить использование функции стрелки жира ES6, карты, уменьшить и вычисленные имена свойств
var a = ["siddharth", "sid", "anything", "something", "nothing", ]
var b = ["23", "67", "10", "10", "90"]
const mergeArrToJSON = (a, b) => a
.map((item, i) => ({[item]: b[i]}))
.reduce((json,val)=>Object.assign({},json,val))
console.log(mergeArrToJSON(a, b))
Если вы хотите добавить еще одну известную стороннюю библиотеку javascript
Lodash, используйте zipObject:
_.zipObject(a, b);
Подчеркните, используйте object:
_.object(a, b);
Если вы можете использовать дополнительный плагин, то
- это то, что вы ищете
_.object(['moe', 'larry', 'curly'], [30, 40, 50]);
=> {moe: 30, larry: 40, curly: 50}
Одиночный код. Просто включите этот js
https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js