Vue 比较两个数组对象,页面展示差异数据值

需求:

页面要展示出被删除和添加的数据,知道哪些被删除和新添加的数据!如下图:

实现:

Vue 中使用 Lodash 的 differenceBy 函数可以方便地比较两个数组并找出它们的差异。

安装和引入Lodash

首先,你需要在项目中安装Lodash库。可以通过npm进行安装:

复制代码
npm i --save lodash

然后,在需要使用differenceBy函数的组件中引入Lodash:

复制代码
import _ from 'lodash';
使用differenceBy函数

differenceBy函数用于找出第一个数组中存在而第二个数组中不存在的元素。其基本语法如下:

复制代码
_.differenceBy(array, [arrays], [iteratee])
  • array:要检查其元素的数组。
  • [arrays]:(可选)一个或多个数组。
  • [iteratee]:(可选)每次调用返回一个用于比较的值。

示例代码

假设有两个数组beforeCitiesafterCities,你想找出beforeCities中有而afterCities中没有的元素:

复制代码
import _ from 'lodash';

const beforeCities: [{
          value: 'Beijing',
          label: '北京'
        }, {
          value: 'Shanghai',
          label: '上海'
        }, {
          value: 'Nanjing',
          label: '南京'
        }],

const afterCities: [{
          value: 'Beijing',
          label: '北京'
        }, {
          value: 'Nanjing',
          label: '南京'
        }, {
          value: 'Chengdu',
          label: '成都'
        }, {
          value: 'Shenzhen',
          label: '深圳'
        }, {
          value: 'Guangzhou',
          label: '广州'
        }],


const result = _.differenceBy(beforeCities, afterCities, 'value');
console.log(result); // 输出: [{value: 'Shanghai',label: '上海'}]

进阶:

进一步封装函数,分别得到删除和添加的数据

复制代码
  <div class="box-left">
    <h1>城市(选择前)</h1>
    <d-table :data="beforeData"></d-table>
  </div>

  <div class="box-warp">
    <div class="box-top">
      <h1>被删除的城市</h1>
      <d-table :data="initData .del"></d-table>
    </div>
    <div class="box-bottom">
      <h1>新增加的城市</h1>
      <d-table :data="initData .add"></d-table>
    </div>
  </div>

  <div class="box-right">
    <h1>城市(选择后)</h1>
    <d-table :data="afterData"></d-table>
  </div>


  initData : {add:[], del:[]}

  import { Dtable} from '@/components/Dtable'

  created() {
    this.initData = this.handList(this.beforeData, this.afterData)
  },

  methods: {
    handList(arr1, arr2) {
      var del= _.differenceBy(this.setJson(arr1), this.setJson(arr2), 'json')
      var add = _.differenceBy(this.setJson(arr2), this.setJson(arr1), 'json')
      return {
        add,
        del,
      }
    },
    setJson(arr) {
      arr.forEach(i => {
        i.json = JSON.stringify(i)
      });
      return arr;
    }
  }
相关推荐
nicole bai2 分钟前
vue前端全局图标闪一下的问题
前端·vue.js
ly76893 分钟前
磁盘 I/O 延迟突增:用 iostat、blktrace 与火焰图定位到具体调用栈
java·linux·前端·数据库·iostat·磁盘 i/o·blktrace
IT_陈寒9 分钟前
Redis并发写入踩坑记录:别让超时设置坑了你
前端·人工智能·后端
晨枫阳10 分钟前
Client authentication(客户端授权)开关与OAuth2 PKCE的深刻理解
前端·安全
福兮说10 分钟前
在浏览器里写一个“够用就好“的 Excel 公式求值器
前端·javascript·excel·编译原理
Bs_MoneyMagnet15 分钟前
基于springboot+vue的图书馆预约系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·毕业设计·图书管理系统·计算机毕业设计
志尊宝23 分钟前
Vue3 零基础每日笔记(027):组件上的 v-model——让自定义组件也能双向绑定
前端·javascript·vue.js·笔记·html5
云浪31 分钟前
从 0 手写一个 MCP Server:让 Copilot 调用 Tool 完成四则运算
javascript·node.js·mcp
萧行之2 小时前
可视化技术复盘:从图形语法看 D3、Vega-Lite、ECharts、Observable Plot
前端·学习·数据可视化
尾善爱看海10 小时前
Vue 面试收官篇:SSR、性能优化落地、30 道高频面试题精讲(附标准答案)
前端·javascript·vue.js·面试·vue