javascript 数组过滤赋值

新手上路,请多包涵
var arr = [
  {
    name: '张三',
    age:'30'
  },
  {
    name: '李四',
    age:'15'
  },
  {
    name: '王五',
    age:'20'
  },
  {
    name: '张三',
    age:'18'
  },
  {
    name: '王五',
    age:'16'
  }
]

我拿到如上一个数组,需要把数组中的下标为0项的 name:'张三'的age值替换成 下标为4项的age,
就是下标为4项的name:'张三'的age值赋值到下标为一项,然后再把下标为4项的name:'张三' 这个对象删除,留第一项
name:'张三'的

var arr = [
  {
    name: '张三',
    age:'18'
  },
  {
    name: '李四',
    age:'15'
  },
  {
    name: '王五',
    age:'16'
  }
]
阅读 2.7k
5 个回答
新手上路,请多包涵
arr.filter((current)=>{
            current.age=current.name==="张三"? "18":current.age
    })
 let obj ={}
 arr = arr.reduce((item,next) => {
        console.log("item is ",item);
        obj[next.name] ? "" : obj[next.name] = true && item.push(next);
        return item;
    },[]);
let arr = [
  {
    name: '张三',
    age:'30'
  },
  {
    name: '李四',
    age:'15'
  },
  {
    name: '王五',
    age:'20'
  },
  {
    name: '张三',
    age:'18'
  },
  {
    name: '王五',
    age:'16'
  }
];

let obj = {};

for(let i = 0; i < arr.length; i++) {
    for(let j = 1; j < arr.length; j++) {
        arr[i].age = arr[i].name == arr[j].name ? arr[j].age : arr[i].age;
    }
};

arr = arr.reduce((item, next) => {
   obj[next.name] ? '' : obj[next.name] = true && item.push(next);
   return item;
}, []);

console.log(arr)
let arr = [{"name":"张三","age":"30"},{"name":"王五","age":"20"},{"name":"李四","age":"15"},{"name":"张三","age":"18"},{"name":"王五","age":"77"},{"name":"张三","age":"456"}]

        //1.数组替换
        arr.forEach((element, index) => {
            arr.forEach((e, i) => {
                if (element.name == e.name) {
                    Object.keys(element).forEach(key => element[key] = e[key]||element[key]);
                }
            })
        });
       console.log(arr);//[{"name":"张三","age":"456"},{"name":"王五","age":"77"},{"name":"李四","age":"15"},{"name":"张三","age":"456"},{"name":"王五","age":"77"},{"name":"张三","age":"456"}]
       // 2.数组去重
        function delet(arr) { 
            var unique = {};
            arr.forEach(function (a) {
                unique[JSON.stringify(a)] = 1
            });
            arr = Object.keys(unique).map(function (u) {
                return JSON.parse(u)
            });
            return arr
        }
        let array = delet(arr2)
        console.log(array);//[{"name":"张三","age":"456"},{"name":"王五","age":"77"},{"name":"李四","age":"15"}]

能想到就这样分两步,如果有更简便的方法记得通知我。

function filter(arr){
   let obj = {}
   let res = []
   // 存到一个对象里
   arr.forEach(item=>{
       obj[item.name] = item.age
   })
   // 对象转数组
   for(let name in obj){
       res.push({
           name,
           age:obj[name]
           })
   }
   return res  
}
function filter(items = []) {
  const hash = new Map();
  for (const item of items) hash.set(item.name, item);
  return Array.from(hash.values());
}

filter(arr);

如果每项的结构一样,也可以这样

function filter(items = []) {
  const hash = {};
  const result = [];

  for (const item of items) {
    const { name } = item;

    if (hash[name]) Object.assign(hash[name], item);
    else result.push((hash[name] = item));
  }

  return result;
}

filter(arr);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题