簡體   English   中英

將數組映射到對象數組

[英]Map array to array of objects

我有一個帶有選定項目的變化數組,其中鍵為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?

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

只需遍歷所有項目,並根據ID是否包含在數組中來設置所選屬性。

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);
})

您可以使用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; } 

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);

請嘗試一下。 我認為它將起作用...

$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;
 }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM