2015-01-09 29 views
0

我有JSON對象的數組從服務器:Underscorejs - 在JSON數組變化值

var a = [ 
{id:1,name:"Piano",class:"Instrument"}, 
{id:2,name:"Guitar",class:"null"}, 
{id:3,name:"null",class:"null"},.....] 

使用underscorejs,是有可能通過這些對象循環,並與空字符串中的每個鍵改變每"null"""

+1

是的,這是完全有可能的。它也可以在純javascript中。你嘗試過什麼嗎?你有什麼問題? – Xotic750

+0

我試着用下劃線但沒有成功。我需要用空字符串來改變這個數組中的每個空值。 – Tomislav

+0

你的代碼是什麼?它是如何不成功的? – Xotic750

回答

2

使用_.each() *方法遍歷集合及其對象,並用空字符串替換等於「null」的值。 所以邏輯與使用嵌套循環遍歷二維數組的方式相同。

*我不建議在這裏使用_.map(),因爲這種方法會產生新的修改陣列,我不知道你是否需要這個,但是如果你想要的話,你也可以在映射函數中使用_.each(obj)映射這個陣列。

var arr, 
 
    searchVal, 
 
    replaceVal; 
 

 
arr = [ 
 
    {id: 1, name: "Piano", class: "Instrument"}, 
 
    {id: 2, name: "Guitar", class: "null"}, 
 
    {id: 3, name: "null", class: "null"} 
 
]; 
 

 
searchVal = "null"; 
 
replaceVal = ""; 
 

 
_.each(arr, function(obj) { 
 
    _.each(obj, function(value, key) { 
 
    if(value === searchVal) { 
 
     obj[key] = replaceVal; 
 
    } 
 
    }); 
 
}); 
 

 
console.log(arr);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore-min.js"></script>

1

,而不是從你的JSON字符串被解析後,通過所有的數據循環的,你可以只創建JSON.parse一個自定義的解析器和保存自己一些時間。

function customParser(key, value) { 
 
    if (value.name === 'null') { 
 
     value.name = ''; 
 
    } 
 
    
 
    if (value.class === 'null') { 
 
     value.class = ''; 
 
    } 
 

 
    return value; 
 
} 
 

 
var jsonText = '[{"id":1,"name":"Piano","class":"Instrument"},{"id":2,"name":"Guitar","class":"null"},{"id":3,"name":"null","class":"null"}]', 
 
    a = JSON.parse(jsonText, customParser); 
 

 
document.body.appendChild(document.createTextNode(JSON.stringify(a)));