2016-06-20 38 views
1

我使用下面給出的JSON.parse()解析了一個數組。

var b = [{"pk":"1","name":"Ali","marked":"N" }, 
{"pk":"2","name":"Zeeshan","marked":"N" }, 
{"pk":"3","name":"Tariq","marked":"N" }] 

此列表中包含大約4000條記錄,現在我想更新marked = "Y"其中pk是[2,3]。 pk列表長度可能是100.我的問題是,我們如何迭代b並設置marked="Y"其中pk是列出的值?

+1

這不是JSON。 JSON是用於數據交換的*文本符號。如果你正在處理JavaScript源代碼,而不是處理*字符串*,那麼你並沒有處理JSON。 –

+0

我已經展示了分析數組。 – sharafjaffri

+0

是的,但重要的是,當你標記這些條目時,你並沒有處理JSON,所以JSON與這個問題無關。 –

回答

1

在現代世界中不需要$.each,數組有forEach等等(如果你真的需要支持像IE8這樣的過時瀏覽器,你可以填充它)。

如果pk可以有100個條目,並且您正在過濾4,000條記錄,那麼我會創建一個pk值的映射並使用它。下面是一個ES5方法:

var b = [ 
 
    {"pk":"1","name":"Ali","marked":"N" }, 
 
    {"pk":"2","name":"Zeeshan","marked":"N" }, 
 
    {"pk":"3","name":"Tariq","marked":"N" } 
 
]; 
 
var pk = ["2", "3"]; 
 

 
// Build the "map" 
 
var map = Object.create(null); 
 
pk.forEach(function(value) { 
 
    map[value] = true; 
 
}); 
 

 
// Mark relevant entries 
 
b.forEach(function(entry) { 
 
    if (map[entry.pk]) { 
 
    entry.marked = "Y"; 
 
    } 
 
}); 
 
console.log(b);

這就避免了不斷呼籲pk.indexOf(entry.pk),看看是否條目應標,這需要每次重新掃描陣列。相反,它利用了JavaScript引擎的對象屬性查找代碼,它在現代瀏覽器上優化了高度(即使未優化它可能是某種哈希映射或類似的,但他們今天優化)。

如果沒有要使用$.each代替,只是改變

pk.forEach(function(value) { 

$.each(pk, function(_, value) { 
// Note ------------^ 

和同爲b循環以後。 $.each調用索引的條目作爲第一個參數,然後然後的值。

+0

不好意思提到$ .each,因爲我是jQuery的新手。 – sharafjaffri

+0

@sharafjaffri:無需道歉! :-) –

1

嘗試

var b = [ 
 
    {"pk":"1","name":"Ali","marked":"N" }, 
 
    {"pk":"2","name":"Zeeshan","marked":"N" }, 
 
    {"pk":"3","name":"Tariq","marked":"N" } 
 
]; 
 
var condition = ["2", "3"]; 
 

 
$.each(b,function(index,value){ 
 
    if(condition.indexOf(value.pk) > -1){ 
 
    value.marked = "Y"; 
 
    } 
 
}); 
 

 
console.log(b);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

Upvoted,接受其他答案,因爲它更具說明性。 – sharafjaffri

相關問題