js处理想要得到数据结构

例1 

var arr = [
    {
        date: "2018-01-10",
        time: "11:00"
    },
    {
        date: "2018-01-10",
        time: "12:00"
    },
    {
        date: "2018-11-27",
        time: "1:00、2:00",
    },
    {
        date: "2018-11-27",
        time: "3:00、4:00"
    },
    {
        date: "2018-01-10",
        time: "5:00"
    }
];
// 输出 [ { date: "2018-11-27", time: "1:00、2:00、3:00、4:00" }, { date: "2018-01-10", time: "5:00" } ]
----------------------------------------------------------------------------------------------------------
var res = arr.reduce((pre, cur)=> {
    let i = pre.findIndex(v=> v.date===cur.date)
    if(i>-1){
        pre[i].time = [pre[i].time, cur.time].join('、')
    }else{
        pre.push(cur)
    }
    return pre }, []) console.log(res)
// 同理 var arr = [{a:1, b:2}, {a:1, c:3}, {a:4, d:5}]
// 得到 [{a:1, b:2, c:3}, {a:4, d:5}]
var res = arr.reduce((pre, cur) => {
  let i = pre.findIndex(v => v.a = cur.a)
  if (i > -1) {
    pre[i].c = cur.c
  } else pre.push(cur)
  return pre
}, [])

------------------------------------------------------------------------------------------------------------
var arr =[{a:1,b:2,c:2},{a:1,b:2,c:3},{a:2,b:3,c:2},{a:2,b:3,c:2},{a:1,b:4,c:2}];
// 得到 [{a: 1, b: 2, c: 5}, {a: 2, b: 3, c: 4}, {a: 1, b: 4, c: 2}]

var res = arr.reduce((pre, cur)=>{
  let i = pre.findIndex(v=> v.a === cur.a && v.b === cur.b)
  i > -1 ? pre[i].c = cur.c + pre[i].c : pre.push(cur)
  return pre
}, [])
console.log(res)

 

----------------------------------------------------------------------------------------------------------------

两个数组比较,拿出相同数据跟不同数据

var arr1 = ["1", "2", "3", "5"]
var arr2 = [{id: "1"},{id: "2"},{id: "3"},{id: "4"}]

var map = new Map(arr2.map(v=> [v.id, v]))
var [res1, res2] = arr1.reduce(([res1, res2], cur)=>{
  map.has(cur) ? res1.push(map.get(cur)) : res2.push(cur)
  
  return [res1, res2]
}, [[], []])

console.log(res1, res2)

  

 





 
 

例2

var arr1 = [{id: 1,name: '小明'}, {id: 2,name: '小强'}];
var arr2 = [{id: 1,age: 10}, {id: 2, age: 20}];

// 输出  [{id: 1, name: '小明', age: 10}, {id: 2,name: '小强', age: 20}]

----------------------------------------------------------------------------------------------------------
var res = arr2.reduce((pre, cur)=> {
    let same = arr1.find(v=> v.id===cur.id)
    pre.push(Object.assign({}, cur, same))
    return pre
}, [])
console.log(res)

 例3 统计数组中相同项出现的个数

var names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
var res = names.reduce((pre, cur)=> {
    pre[cur] = pre[cur] ? ++pre[cur] : 1
    return pre
}, {})
for(var i in obj){
    console.log(i, obj[i])
}

例4 数组的降维  (多维嵌套数组转化为单个数组)

如   [11, 20, 30, [17, 18, [9, 8, [1, 2, 3]]]]  输出 [11, 20, 30, 17, 18, 9, 8, 1, 2, 3]

var arr = [11,20,30,[17,18,[9,8,[1,2,3]]]]
var res = arr => arr.reduce((pre, cur)=> {
    Array.isArray(cur) ? pre.push(...res(cur)) : pre.push(cur)
    return pre
}, [])

console.log(res(arr))

// 递归实现:
function flatten(arr){
    var arr2=[]
    for(var i=0;i<arr.length;i++){
        cur = arr[i]
        Array.isArray(cur) ? arr2.push(...flatten(cur)) : arr2.push(cur)
    }
    return arr2
    
}
console.log(flatten([[0, 1,[6,7,8,9]], [2, 3], [4, 5]]))

// 1.数组扁平化、2.去除其中重复数据、3.得到一个升序且不重复的数组

方法1:var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]
    function flatten(arr){
      let res = arr.reduce((pre, cur)=>{
        Array.isArray(cur)?pre.push(...flatten(cur)):pre.push(cur)
        return pre
      }, [])
      return [...new Set(res)].sort((a,b)=>a-b)
    }
    console.log(flatten(arr))
    // [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]

方法2:
    var arr = [ [1, 2, 2], [3, 4, '5', 5], [6, 7, 8, 9, [11, 12, [12, '13', [14] ]] ], '10']

    console.log([...new Set(arr.flat(Infinity))].sort((a,b)=>a-b))

 

例5  数组(对象)去重   +  多数组的合并去重 

// 数组去重
var arr = [1,1,1,22,3,,4,4]
var res = [...new Set(arr)]
console.log(res)

var arr = [1,1,1,22,3,4,4]
var res = arr.filter((v, i, pre)=> pre.indexOf(v) === i)

// 数组对象去重
var arr = [{a:1,b:2},{a:1,b:2},{a:3,b:1},{a:5,b:2},{a:3,b:1}];//对象数组
var res = arr.reduce((pre, cur)=>{
    var i = pre.findIndex(v=>JSON.stringify(v)===JSON.stringify(cur))
    if(i===-1){
      pre.push(cur)
    }
    return pre
  }, [])

// 多数组的合并去重
var arr1 = [1,2,3,4]
var arr2 = [1,2,3,4,5,6]
var res = [...new Set([...arr1, ...arr2])]
console.log(res)

 

 例6  代码正常运行

Array.prototype.multiply = function(){
    return this.push(...this.map(v=>v*v))
}
var a = [1,2,3,4,5]
a.multiply()
console.log(a) // [1,2,3,4,5,1,4,9,25]

 

例7 项目中遇到的数据结构

var data = {
      "ETH": {
        "PPTR": [{ "curno": "KRW", "price": null }, { "curno": "JPY", "price": null }, { "curno": "USD", "price": null }, { "curno": "CNY", "price": '1' }],
        "ETH": [{ "curno": "KRW", "price": null }, { "curno": "JPY", "price": null }, { "curno": "USD", "price": null }, { "curno": "CNY", "price": '5' }]
      },
      "USDT": {
        "USDT": [{ "curno": "KRW", "price": null }, { "curno": "JPY", "price": null }, { "curno": "USD", "price": null }, { "curno": "CNY", "price": '10' }
        ]
      },
        'eoc':[]
    }
var arr = []
for (let [key, val] of Object.entries(data)) {
        for(let [key1, val1] of Object.entries(val)){
        val1.reduce((cur, pre)=>{
            arr.push({chain: key, symbol: key1, ...pre})
        }, [])
    }
    }

console.log(arr)    

 

例8 一段很溜的代码

var a = [
  { key: "id",num: "111" },
  { key: "age", num: "222" }
];

var b = [
  { key: "age",initVal: "23"},
  { key: "id",initVal: "001"}
]

var merge = (a,b) =>[...a.concat(b).reduce((m, x) => m.set(x.key, Object.assign(m.get(x.key) || {}, x)), new Map()).values()]
console.log(merge(a,b))

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/musi03/p/10034137.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值