试图遍历内部对象并根据条件更改值

时间:2020-07-17 23:37:47

标签: javascript object

下面是我尝试根据某些值进行修改的对象结构

from django.db.models import Manager, Model, CharField, DateTimeField, ForeignKey, ManyToManyField, PROTECT
from django.urls import reverse


class Author(Model):
    name  = CharField()
    books = ManyToManyField(
              to           = 'Book',
              related_name = 'books')

    def natural_key(self):
        return (self.name)


class BookManager(Manager):
    def get_by_natural_key(self, title, release_date, author):
        return self.get_or_create(
                 title        = title,
                 release_date = release_date,
                 author       = author)[0]


class Book(Model):
    title        = CharField()
    release_date = DateTimeField()
    author       = ForeignKey(
                     to        = 'Author',
                     on_delete = PROTECT)
    objects      = BookManager()

    def natural_key(self):
        return (self.title)

并且我正在根据条件修改export const PROJECT_PHASE = Object.freeze({ CONCEPT: { label: 'Concept', stepNumber: 0, disabled: false, description: '' }, SCHEMATIC: { label: 'Schematic', stepNumber: 1, disabled: false, description: '' }, DESIGN_DEVELOPMENT: { label: 'Design Development', stepNumber: 2, disabled: false, description: '' }, CONSTRUCTION_DOCUMENTS: { label: 'Construction Documents', stepNumber: 3, disabled: false, description: '' } }); 的值,并尝试返回相同的对象结构,但无法通过此操作并在If语句中收到类似description的错误。

expression expected

请帮忙,我如何实现修改内部对象? 非常感谢!!!

3 个答案:

答案 0 :(得分:2)

您看到该错误,因为在forEach中,您使用的是()而不是{}

PROJECT_PHASE=Object.freeze({
    CONCEPT: { label: 'Concept', stepNumber: 0, disabled: false, description: '' },
    SCHEMATIC: { label: 'Schematic', stepNumber: 1, disabled: false, description: '' },
    DESIGN_DEVELOPMENT: {
      label: 'Design Development',
      stepNumber: 2,
      disabled: false,
      description: ''
    },
    CONSTRUCTION_DOCUMENTS: {
      label: 'Construction Documents',
      stepNumber: 3,
      disabled: false,
      description: ''
    }
   });
   currentStepNumber=3
   Object.entries(PROJECT_PHASE).forEach(([key,value]) => {
    if(value.stepNumber === currentStepNumber){
      value.description = 'Current';
    }
   });

console.log(PROJECT_PHASE)

答案 1 :(得分:2)

const PROJECT_PHASE = Object.freeze({
  CONCEPT: { label: 'Concept', stepNumber: 0, disabled: false, description: '' },
  SCHEMATIC: { label: 'Schematic', stepNumber: 1, disabled: false, description: '' },
  DESIGN_DEVELOPMENT: {
    label: 'Design Development',
    stepNumber: 2,
    disabled: false,
    description: ''
  },
  CONSTRUCTION_DOCUMENTS: {
    label: 'Construction Documents',
    stepNumber: 3,
    disabled: false,
    description: ''
  }
});

const currentStepNumber = 2;

const alteredEntries = Object.entries(PROJECT_PHASE).map(([key,value]) => {
  let newValue = value;
  if(value.stepNumber === currentStepNumber){
    newValue.description = 'Current';
  }
  return [key,newValue]
});

const alteredObject = Object.fromEntries(alteredEntries);
console.log(alteredObject);

这将创建PROJECT_PHASE对象的副本,并根据需要进行修改。请注意,使用map代替forEach,然后将结果输入Object.fromEntries

答案 2 :(得分:1)

您使用出租车这种方式,您的代码中有错误。我在这里使用currentStepNumber是3

  Object.entries(PROJECT_PHASE).forEach(([key,value]) => {
    if(value.stepNumber === 3){
      value.description = 'Current';
    }
  });