如何根据条件向数组添加对象元素

10
我有一个静态数组常量,里面包含类似以下的对象。
export const EMPLOYEES = [
  {
    id: 2,
    name: ‘John’,
  },
  {
    id: 3,
    name: ‘Doe’,
  },
  {
    id: 4,
    name: ‘Bull’,
  },
  {
    id: 5,
    name: ‘Scott’,
  },
];

现在,我需要仅在某些条件为true时添加最后一个元素。类似于如果isAmerican()为true。

有人可以帮我如何基于条件添加元素吗?谢谢。


2
无法像那样修改常量。 - Blue
1
你不能修改常量所指向的内容,但是你可以向数组中添加元素。因此,可以这样做:if (isAmerican()) { employees.push({ id: 6, name: 'Timmy' }) } - Carwyn Stephen
现在我需要仅基于某些条件为真的情况下获取最后一个元素。你所说的“have”是指什么?删除?获取? - StudioTime
@FrankerZ 当然可以,const 中的任何内容都不会使数组变为不可变。 - Bergi
3个回答

24
你可以使用扩展运算符来实现:
export const EMPLOYEES = [
    {
        id: 2,
        name: "John",
    },
    {
        id: 3,
        name: "Doe",
    },
    {
        id: 4,
        name: "Bull",
    },
    {
        id: 5,
        name: "Scott",
    },
    ... isAmerican() ? [{ id: 6, name: "Jemmy"}] : []
];

2

您永远不应该修改(或尝试修改)常量。我可以看到两种方法可以做到这一点:

  1. 创建一个纯函数来返回一个新的常量,其中包含添加到数组中的新对象
  2. 在常量的定义中使用展开运算符

选项1:纯函数

function makeNewArray(array, objectToAppend, isAmerican) {
    return isAmerican ? [...array, objectToAppend] : array
}

const EMPLOYEES = [
    {
        id: 2,
        name: "John",
    },
    {
        id: 3,
        name: "Doe",
    },
    {
        id: 4,
        name: "Bull",
    },
    {
        id: 5,
        name: "Scott",
    }
];

const arrayWithAmerican = makeNewArray(EMPLOYEES, { id: 6, name: "American Frank"}, true);
const arrayWithoutAmerican = makeNewArray(EMPLOYEES, { id: 6, name: "Not American Frank"}, false);

console.log(arrayWithAmerican);
console.log(arrayWithoutAmerican);

选项2:展开运算符

function isAmerican(){
    // generic code here.
    return true;
}

const EMPLOYEES = [
    {
        id: 2,
        name: "John",
    },
    {
        id: 3,
        name: "Doe",
    },
    {
        id: 4,
        name: "Bull",
    },
    {
        id: 5,
        name: "Scott",
    },
    ... isAmerican() ? [{ id: 6, name: "American Frank"}] : []
];

1
如果条件得到满足,只需将一个对象推送到您的EMPLOYEES数组中:
let isAmerican = true;

const EMPLOYEES = [
  {
    id: 2,
    name: "John",
  },
  {
    id: 3,
    name: "Doe",
  },
  {
    id: 4,
    name: "Bull",
  },
  {
    id: 5,
    name: "Scott",
  },
];

if(isAmerican) {
    EMPLOYEES.push({
    id: 6,
    name: "Frank"
  })
}
console.log(EMPLOYEES)

代码演示: https://jsfiddle.net/rqx35pLz/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接