来个大佬解下 js数组

假设后端数据为:

datas: [
  {
   id: 1,
   a: "123",
   b: "234",
   d: "567",
   c: "345"
  },
  {
   id: 2,
   a: "223",
   b: "234",
   d: "267",
   c: "245"
  },
  {
   id: 3,
   a: "323",
   b: "334",
   d: "367",
   c: "345"
  },
]

定义一个方法,将后端数据转化:

接受两个参数 一个自定义参数类型
let obj = {
id: null,
a: null,
d: null
}
一个后端的数据:
function reSetData(obj, arr) {
//
}
期望数据:

data: [
  {
    id: 1,
    a: '123',
    d: '567'
  },
  {
    id: 2,
    a: '223',
    d: "267",
  },
  {
    id: 3,
    a: '323',
    d: "367",
  },
]
阅读 2.7k
4 个回答
function reSetData(obj, arr) {
 const pick = keys => obj => keys.reduce((res, k) => (res[k] = obj[k], res), {});
 return arr.map( pick( Object.keys(obj) ) );
}
      var arr = [
            {
                id: 1,
                a: "123",
                b: "234",
                d: "567",
                c: "345"
            },
            {
                id: 2,
                a: "223",
                b: "234",
                d: "267",
                c: "245"
            },
            {
                id: 3,
                a: "323",
                b: "334",
                d: "367",
                c: "345"
            },
        ];
        var obj = {
            id: null,
            a: null,
            d: null
        }
 function reSetData(obj, arr) {
            var keys = Object.keys(obj);
            return arr.map((item) => {
                var tmp = {};
                keys.forEach(k => tmp[k] = item[k]);
                return tmp;
            })
        }
        reSetData(obj, arr);
        //[{"id": 1, "a": "123", "d": "567"}, {"id": 2, "a": "223", "d": "267"}, {"id": 3, "a": "323", "d": "367"}]

方法1:

function reSetData(obj, arr) {
  const keys = Object.keys(obj)
  cosnt ret = arr.map(item=>keys.reduce((total, current)=>[total[current] = 
    item[current],total][1], {}))
  return ret
}

方法2:
用经典的lodash 方法库,不过引入包大点

import {pick} from 'lodash'

const ret = pick(arr, Object.keys(obj));

方法3:
用Ramda库,包很小哦

const R = require('ramda');

const ret = R.pick(Object.keys(obj), arr);
function reSetData(obj, arr) {
    let filterNames = new Set(Object.keys(obj))
    return arr.map(o=>{{
        let res = {}
        for(let k in o){
            if(filterNames.has(k)){
                res[k] = o[k]
             }
        }
        return res
    }})
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题