2015-04-23 5 views
0

Массив заключается в следующем:Как преобразовать массив объектов в строку в JavaScript?

[{name:'name1',id:'id1',val:'001}, 
... 
{name:'name10',id:'id10',val:'010}] 

Мы хотим хранить в базе данных в виде длинной строки текста:

name1,id1,001;...;name10,id10,010 

значений, разделенных точкой с запятой и запятой.

Есть ли какой-либо удобный join или что-то еще для его достижения? (Я предполагаю, что там должно быть что-то лучше, чем for петли.)

+1

Если вы счастливы с Jquery, то это легко: http://jsfiddle.net/XWCv8/413/ И поскольку вопрос не помечен JQuery, я не могу добавить его в качестве ответа :( –

+1

Поскольку это не массив , но объект, вы не можете использовать 'join' и не получите детерминированный порядок, если вы не являетесь явным. – Bergi

ответ

3
function joinValues(arr, j1, j2) { 
    return arr.map(function(o) { 
    return Object.keys(o).map(function(k) { 
     return o[k]; 
    }).join(j1) 
    }).join(j2); 
} 

var obj = [{a:1,b:2},{a:'x',b:'y'}]; 
joinValues(obj, ',', ';'); // => "1,2;x,y" 
+0

Это хороший! +1 –

+0

Теперь это прекрасно после редактирования :) –

+0

Удивительный! Это, безусловно, красивый JavaScript. Большое спасибо. – Blaise

1

Я боюсь, что это не встроенная функция языка для этого, но если вы можете использовать ES6, это может выглядеть довольно элегантно

Object.values = obj => Object.keys(obj).map(key => obj[key]); 

// so to convert your data 
data.map(o => Object.values(o).join(',')).join(';'); 
2
array.map(function(o){ 
    var values = Object.keys(o).map(function(key){ 
    return o[key]; 
    }); 
    return values.join(','); 
}).reduce(function(a,b){ 
    return a + ';' + b; 
}); 

Берегись там могут быть Compat вопросы в зависимости от вашей платформы (map, reduce, Object.keys пока не доступны везде!)

Также учтите, что порядок свойств в обычных объектах - not guaranteed. При таком подходе теоретически вы можете получить name1,id1,001;...;id10,name10,010. Это может быть проблемой при сопоставлении строки с объектами.

Смежные вопросы