2016-12-09 71 views
0

的陣列我有選擇的項目,其中關鍵的是ID的改變陣列:地圖數組對象

[1, 2, 4, 6] 

和數組對象:

items = [ 
    { 
    id: 1, 
    selected: false 
    }, 
    { 
    id: 2, 
    selected: false 
    }, 
    { 
    id: 3, 
    selected: false 
    }, 
    { 
    id: 4, 
    selected: false 
    }, 
    { 
    id: 5, 
    selected: true 
    }, 
    { 
    id: 6, 
    selected: false 
    } 
] 

我該如何映射選擇陣列項目並將「selected」更改爲true,對於其他項目將其更改爲false?

+0

有很多種方法可以完成這個任務,但是您可以提供更多關於您的用例的細節,因爲可能有更好的方法,那麼只需遍歷所有項目並更新值?例如,您可以將'items'數組更改爲hashmap/object,並且看起來類似於:items:{1:{id:1,selected:false}}',但這完全取決於 –

回答

2
var items = [ 
    { 
    id: 1, 
    selected: false 
    }, 
    { 
    id: 2, 
    selected: false 
    }, 
    { 
    id: 3, 
    selected: false 
    }, 
    { 
    id: 4, 
    selected: false 
    }, 
    { 
    id: 5, 
    selected: true 
    }, 
    { 
    id: 6, 
    selected: false 
    } 
]; 
var array = [1, 2, 4, 6]; 

items.forEach(function(item) { 
    item.selected = (array.indexOf(item.id) !== -1); 
}) 
-1

請嘗試。我認爲它會起作用...

$new=array(); 
foreach($items as $item){ 
    if($item['selected']==false){ 
$new.=array_merge($item['id']); 
    } 
} 
print_r($new); 

並將非選定項目更改爲true。

foreach($items as $item){ 
if($item['selected']==false){ 
$item['selected']=true; 
} 
} 
+0

這是什麼語言? –

0
var arr = [1,2,4,6]; 
var items = [ 
    { 
    id: 1, 
    selected: false 
    }, 
    { 
    id: 2, 
    selected: false 
    }, 
    { 
    id: 3, 
    selected: false 
    }, 
    { 
    id: 4, 
    selected: false 
    }, 
    { 
    id: 5, 
    selected: true 
    }, 
    { 
    id: 6, 
    selected: false 
    } 
]; 

var notSelected = $.grep(items, function(e) { return arr.indexOf(e.id) == -1 }).map(function(e) { e.selected = false; return e;}); 
var selected = $.grep(items, function(e) { return arr.indexOf(e.id) != -1 }).map(function(e) { e.selected = true; return e;}); 

結果:

notSelected.concat(selected); 
+0

通常最好不要提供jQuery解決方案,除非有要求。 –

1

你可以使用一個Map和遍歷數組,並設置所有false,然後選擇true

var selected = [1, 2, 4, 6], 
 
    items = [{ id: 1, selected: false }, { id: 2, selected: false }, { id: 3, selected: false }, { id: 4, selected: false }, { id: 5, selected: true }, { id: 6, selected: false }], 
 
    map = new Map; 
 

 
items.forEach(a => (map.set(a.id, a), a.selected = false)); 
 
selected.forEach(a => map.get(a).selected = true); 
 

 
console.log(items);
.as-console-wrapper { max-height: 100% !important; top: 0; }

一個版本Set

var selected = [1, 2, 4, 6], 
 
    items = [{ id: 1, selected: false }, { id: 2, selected: false }, { id: 3, selected: false }, { id: 4, selected: false }, { id: 5, selected: true }, { id: 6, selected: false }], 
 
    set = new Set(selected); 
 

 
items.forEach(a => a.selected = set.has(a.id)); 
 

 
console.log(items);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

似乎'選擇'改變,但'物品'不?在這種情況下,解決方案應該從'items'構建地圖一次,然後根據新的'selected'更新'items'。 –

3
items.forEach(item => item.selected = array.contains(item.id)) 

只需遍歷項,設置基於該ID是否被包含在陣列中的所選屬性。