各种数据处理的记录

218 阅读3分钟
菜鸡女程序员最怕就是数据处理,特别是绕来绕去的,思路就跟不上,混的不容易,把能记录的记录一下,以后好复制,咳咳!


对象

1.替换某一个value值

const  data = {
    bizInst: "已全选"
    bizRegion: "已全选"
    businessDesc: "1111"
    enterpriseType: "IPO"
    merchantType: "已全选"
    name: "liujiaceshi13"
    onboardChannel: "已全选"
    templateId: "template.sys.v2"
}

我想过滤出来里面value是‘已全选’的,然后替换成‘all’,方法挺多,但是我笨啊,我就想到了一个转字符串然后转回来的办法;

这样的:

const item = JSON.parse(
JSON.stringify(datas, (key, id) => {
        if (id === '已全选') {
          return 'all'       
 }        return id      
}))

但是这样真的有点菜鸡了,想不出来啊,就问了下朋友,数据处理大师,果然结果是好很多:

Object.keys(obj).forEach(
      key => (obj[key] = obj[key] === '已全选' ? 'all' : obj[key]),
    );

2.删除某一个value对应key

数据:

const data = {hasMD5Key: true, hasRSAKey: true, hasRSA2Key: false}

处理方法:

 1. Object.keys(itemTypes).forEach(item => {    if (!itemTypes[item]) {      delete itemTypes[item]    }  });
2.  for (let i in itemTypes) {    if(!itemTypes[i]) {      delete itemTypes[i]    }  }

数组

1.key相同时,把item中另一个key的value相加

const aaa = [      { rname: '批发和零售业', rnumber: 0, dealNumber: 2 },      { rname: '制造业', rnumber: 5, dealNumber: 0 },      { rname: '批发和零售业', rnumber: 3, dealNumber: 0 },    ];

把里面rname的key相同时候的rnumber和dealName分别相加返回一个新的对象到数组,删除相加的item,不知道懂不懂简单就是要返回这个样子

const aaa = [      { rname: '批发和零售业', rnumber: 3, dealNumber: 2 },      { rname: '制造业', rnumber: 5, dealNumber: 0 },    ];

当然不止这几条数据啦~

aaa.reduce(      (pre, cur, _, arr) => {        const flag = pre.find(item => item.rname === cur.rname);         if (!!flag) {          const newData = {            rname: flag.rname,            rnumber: flag.rnumber + cur.rnumber,            dealNumber: flag.dealNumber + cur.dealNumber,          };          const filteredData = pre.filter(item => item.rname !== cur.rname);          return [...filteredData, newData];        }        return [...pre, cur];      },      [aaa[0]],    );

aaa.reduce(
      (pre, cur, _, arr) => {
        const flag = pre.find(item => item.rname === cur.rname);
         if (!!flag) {
          const newData = {
            rname: flag.rname,
            rnumber: flag.rnumber + cur.rnumber,
            dealNumber: flag.dealNumber + cur.dealNumber,
          };
          const filteredData = pre.filter(item => item.rname !== cur.rname);
          return [...filteredData, newData];
        }
        return [...pre, cur];
      },
      [aaa[0]],
    );

还有一个类似的数据处理:

id相同的时候保留time最大的值

getMax = () => {    const data = [      { id: 1, time: 1 },      { id: 1, time: 2 },      { id: 2, time: 3 },      { id: 3, time: 3 },    ];    const res = data.reduce((pre, cur) => {      return !pre.find(value => value.id === cur.id)        ? [...pre, cur]        : pre.find(value => value.id === cur.id).time > cur.time        ? [...pre]        : [...pre.filter(value => value.id !== cur.id), cur];    }, []);    console.log(1111, res);  };


2.从一个数组中找到另一个数组匹配的数组对象的值

const data = [

 {code: "00061000020180322001000", instId: "3088", mainProdCode: "00061000000000001253", name: "tracyProdSale1", status: "02", …},
{code: "00061000020180820001100", instId: "3088", mainProdCode: "00061000000000001253", name: "全三test2", status: "02", …},
{code: "00061000020181017001001", instId: "3088", mainProdCode: "00061000000000001858", name: "颵栩测试", status: "02", …}

]

const arr = ["00061000020180322001000", "00061000020180820001100"]

我想找到arr的item对应data里面code相同的一个对象,返回新的数组对象;

嘿嘿,问了个简单的方法,必须记录一下

const result = data.filter(item => arr.includes(item.code));


不知道写什么了,持续更新····