首页 > 解决方案 > 对象值不更新 javascript

问题描述

const displayDataTypes = [];
const TypeMap = {
  data: ['type2', 'type3'],
};
  
const Type = {
  title: 'Type',
  values: [
    { label: 'Type-1', value: 'type1', disabled: false },
    { label: 'Type-2', value: 'type2', disabled: false },
    { label: 'type-3', value: 'type3', disabled: false },
    { label: 'type-4', value: 'type4', disabled: false },
    { label: 'type-5', value: 'type5', disabled: false }
  ]
};
  
const TypesSelection = TypeMap['data'];  
  
Type.values.forEach((item) => {
  const tmp = Object.create(item);
  TypesSelection.forEach((type) => {
    if (tmp.value !== type) {
      tmp.disabled = true;
    }
  });
  displayDataTypes.push(tmp);
});
  
console.log(displayDataTypes);

在上面的代码中,每个对象属性 disabled 都变为 true。我需要 type2 和 type3 应该是 false 并且 rest 应该是 true 因为 TypeMap - 数据。所以输出应该是

[
  { label: 'Type-1', value: 'type1', disabled: true  },
  { label: 'Type-2', value: 'type2', disabled: false },
  { label: 'type-3', value: 'type3', disabled: false },
  { label: 'type-4', value: 'type4', disabled: true  },
  { label: 'type-5', value: 'type5', disabled: true  }
]

标签: javascriptjsonobject

解决方案


尝试使用以下Array.map功能:


const output = Type.values.map(v => {
  v.disabled = !TypesSelection.includes(v.value);
  return v;
})

console.log(output)

这不仅更小,而且更具可读性。

了解有关该Array.map功能的更多信息:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map


推荐阅读