去重、合并相同属性值、相同项属性合并数组、字符串全局替换、根据相同属性合并两个数组

去重1. 简单类型   set对象

const arr = ['张三','张三','三张三']
let set = new Set(arr); // set 自带去重
// Set { '张三', '三张三' }
console.log(set);
console.error(Array.from(set)); // [ '张三', '三张三' ]

去重2, 数组对象类型  reduce:将数组元素处理为一个值(必填参数total 计算后的返回值、curr当前元素)

let person = [
     {id: 0, name: "小明"},
     {id: 1, name: "小张"},
     {id: 2, name: "小李"},
     {id: 3, name: "小孙"},
     {id: 1, name: "小周"},
     {id: 2, name: "小陈"},   
];

let obj = {};

let peon = person.reduce((cur,next) => {
    obj[next.id] ? "" : obj[next.id] = true && cur.push(next);
    return cur;
},[]) //设置cur默认类型为数组,并且初始值为空的数组
console.log(peon);
// (4) [{…}, {…}, {…}, {…}]0: {id: 0, name: "小明"}1: {id: 1, name: "小张"}2: {id: 2, name: "小李"}3: {id: 3, name: "小孙"}length: 4__proto__: Array(0)

相同属性的相加

let obj = {};
 const arr = [
 { name: 'A', stock: 1 }, 
 { name: 'B', stock: 1 }, 
 { name: 'A', stock: 33 }, 
 { name: 'B', stock: 2 }, 
 { name: 'C', stock: 0 }
 ];
arr.forEach(v=>{
     if (obj.hasOwnProperty(v.name)) {
         obj[v.name] += v.stock
     } else{
        obj [v.name] = v.stock
     }
 })
console.log(obj)  //{A: 34, B: 3, C: 0}
hasOwnProperty: 判断某个对象中是否有某个属性,返回值为布尔值
Object.propertype.bar = 1
var fool = {a: 'b'}
fool.bar = 1
fool.hasOwnProperty('bar')    // false
fool.hasOwnProperty('a')   // true

 相同项属性合并数组

var array = [
    {name: '张飞', value: '1'},
    {name: '张飞', value: '2'},
    {name: '张飞', value: '3'},
    {name: '关羽', value: '9'},
    {name: '关羽', value: '6'},
    {name: '刘备', value: '8'},
    {name: '刘备', value: '2'},
    {name: '刘备', value: '1'}
];
var newArr = [];
for(var i = 0; i< array.length; i++){
    var index = newArr.findIndex(function(item) {
        return item.name === array[i].name    
    });
    if(index !== -1){
        newArr[index].value.push(array[i].value);
    }else{
        newArr.push({
            name: array[i].name,
            value: [array[i].value]
        })
    }
}
console.log(newArr)   //[{"name": "张飞","value": ["1","2","3"]}]

字符串全局替换

replace(new RegExp("-","gm"),"/")

根据相同属性合并两个数组

var array1 = [
    {"Num": "A", "Name": "t2"},
    {"Num": "B", "Name": "t2"}
];
var array2 = [
     {"Num": "A","Name": "t1"},
     {"Num": "B","Name": "t1"},
     {"Num": "C" ,"Name": "t3",age:'222'},
     {"Num": "D" ,"Name": "t4",age:'3333'}
];
for(var i = 0; i < array2.length; i++){
    var isExist = false;
    for(var j = 0; j < array1.length; j++){
        if(array1[j].Num == array2[i].Num){
            isExist = true;
            break;
        }
    }
    if(!isExist){
        array1.push(array2[i]);
    }
}
console.log(array1);

 

posted @ 2019-10-08 14:19  番茄西红柿u  阅读(484)  评论(0编辑  收藏  举报