更新typescript中的数组元素值(Angular)

时间:2018-06-14 08:02:26

标签: angular typescript

我正在使用angular 5.我需要更新基于selectedMobile的数组值。 我的编码:

const mobilelist = [
    { 'key': 'apple', 'name': 'Apple', 'checked': false },
    { 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
    { 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
    { 'key': 'mi', 'name': 'Mi', 'checked': false }
  ]; 
const selectedMobile = ['apple']; 
const newmobilelist: any = [];
if (selectedMobile.length > 0) {
  mobilelist.forEach(element => {
    if (selectedMobile.find(x => x == element.key) != null) {
      newmobilelist.push({ 'key': element.key, 'name': element.name, 'checked': true });
    } else {
      newmobilelist.push({ 'key': element.key, 'name': element.name, 'checked': false });
    }
  });
}
console.log(newmobilelist);

在控制台中,我期待的结果如下:

[
  { 'key': 'apple', 'name': 'Apple', 'checked': true },
  { 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
  { 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
  { 'key': 'mi', 'name': 'Mi', 'checked': false }
];

但上面的代码返回如下:

[
  { 'key': 'apple', 'name': 'Apple', 'checked': false },
  { 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
  { 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
  { 'key': 'mi', 'name': 'Mi', 'checked': false }
]; 

我不知道为什么?,请帮忙解决......

1 个答案:

答案 0 :(得分:3)

如前所述,您的代码似乎运行正常。但是,它不必要地复杂,你可以像这样大幅缩小它。

const mobilelist = [
    { 'key': 'apple', 'name': 'Apple', 'checked': false },
    { 'key': 'sumsung', 'name': 'Sumsung', 'checked': false },
    { 'key': 'oneplus', 'name': 'Oneplus', 'checked': false },
    { 'key': 'mi', 'name': 'Mi', 'checked': false }
];
const selectedMobile = ['apple'];
const newmobilelist = mobilelist.map(x => { x.checked = selectedMobile.includes(x.key); return x});
console.log(newmobilelist)