更新对象数组中一个对象的一个​​属性值,返回更新后的数组

时间:2019-12-12 15:51:16

标签: javascript arrays ecmascript-6 javascript-objects array.prototype.map

我正在尝试为删除的​​对象更新对象数组中的一个值NAME = myprog CC = gcc CFLAGS = -Wall -O3 -I $(INCDIR) LDFLAGS = -lpthread -lm SRCDIR = ./src INCDIR = ./include BINDIR = /usr/local/bin SOURCES = $(SRCDIR)/main.c $(SRCDIR)/dummy_functions.c OBJECTS = $(SOURCES:.c=.o) all: $(NAME) $(NAME): $(OBJECTS) $(CC) $^ -o $@ $(CFLAGS) $(LDFLAGS) $(SRCDIR)/%.o: %.c $(CC) $^ -c $< $(CFLAGS) $(LDFLAGS) clean: ...

is_deleted

输出

  const handleDelete = (idx) => {
    const filteredCards = cards.map((card, i) => {
      if(i == idx) {
        card.is_deleted = true;
        return {...cards}
      }
    })
   setCards(filteredCards);
  }

所需的输出

cards = [
  undefined,
  [
   { id: 1, is_deleted: false },
   { id: 2, is_deleted: true },
  ]
]

输出部分正确-在索引1,我看到了两张卡,第二张cards = [ { id: 1, is_deleted: false }, { id: 2, is_deleted: true }, ] 被设置为is_deleted。但是,在索引0处有一个“未定义”。

任何了解为什么这样做都是有帮助的!谢谢,让我知道是否错过了关键信息。

1 个答案:

答案 0 :(得分:1)

您可以直接访问卡,而无需使用map

let cards = [
  { id: 1, is_deleted: false },
  { id: 2, is_deleted: false },
]
const setCards = c => cards = c(cards.slice())

const handleDelete = idx => setCards(cards => (cards[idx].is_deleted = true, cards))

handleDelete(1)
console.log(cards)

setCards函数只是模仿react的useState