javascript - 如何从嵌套对象的数组中删除元素? (lodash)

标签 javascript arrays reactjs underscore.js lodash

<分区>

我有一个像这样的对象

data: {
    registrationNumber: 'MH1234',
    type: 'xyz',
    driver: {
      user: {
        firstName: 'xyz',
        lastName: 'abc',
        email: 'xyz',
        phone: 1234,
        city: 'random',
        dateOfBirth: new Date(),
        groups: [1]
      }
    },
    owner: {
      user: {
        firstName: 'xyz',
        lastName: 'abc',
        email: 'xyz',
        phone: '1234',
        city: 'random',
        groups: [1, 2]
      },
      kyc: [
        {
          method: 'xyz',
          id: 'abcd'
        },
        {
          method: 'xyz',
          id: 'abcd'
        }
      ]
    }
  }

如何删除路径 data.owner.kyc.0 中的元素?

我试过使用 _.unset() 但它并不理想,因为数组在删除后仍然显示 2 个元素

最佳答案

你不需要 lodash 来完成这个。

使用 .shift() 从数组中删除第一个元素。

let newData = {...data}

newData.owner.kyc.shift()

.splice()从某个点移除元素。

let newData = {...data}

newData.owner.kyc.splice(0, 1)

使用 .filter() 去除不符合指定条件的项目

let newData = {...data}

newData.owner.kyc = newData.owner.kyc.filter((item, index) => {
   return index !== 0
})

由于您使用的是 React,因此您希望将此数据置于组件状态,以便当您实际从数组中删除某些内容时,应用程序会更新以反射(reflect)新结果。

查看沙箱:https://codesandbox.io/s/mystifying-fog-2yhwd

class App extends React.Component {
  state = {
    data: data
  };

  removeFirstItem = () => {
    const { data } = this.state;

    let newData = { ...data };

    newData.owner.kyc.shift();

    this.setState({
      data: newData
    });
  };

  render() {
    const { data } = this.state;
    return (
      <div>
        <h4>Car Info:</h4>
        <div>
          KYC:
          {data.owner.kyc.map((item, index) => {
            return (
              <div>
                <span>{index + 1}) </span>
                {item.id}
              </div>
            );
          })}
        </div>
        <button onClick={this.removeFirstItem}>Remove first item</button>
      </div>
    );
  }
}

关于javascript - 如何从嵌套对象的数组中删除元素? (lodash),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57428471/

相关文章:

java - 如果数组有效,如何创建传递的数组的深拷贝?

javascript - React Router 的 ES6 导入错误

javascript - 可折叠的 CSS 和 JS 在 Angular 应用程序中不起作用

javascript - 在 Windows 8 Javascript 中关闭相机的正确方法是什么?

c - 如何使用 malloc 更改结构的大小

css - 将 sass/css 模块添加到 typescript react app

javascript - 如何使用 native react 在平面列表中显示对象数组中的数组列表?

javascript - 将 "stopwatch"时间转换为每小时

javascript - Jquery同源Ajax调用错误

Javascript:我正在尝试使用 switch 语句将字符串推送到新数组