1. 程式人生 > >js陣列中物件怎麼合併

js陣列中物件怎麼合併

var list=[{id:1,number:2,title:2},{id:1,number:3,title:2}]
function merge (list){  let result=[ ]  let cache={ }  list.forEach(item=>{     let key=  id:${item.id},title${item.title}       let index= cache[key]      if(index !==undefined){         result[index].number +=item.number      }else{         result.push(object.assign({ }, item))
cache[key]=result.length - 1 } }) return result}merge(list)

數組合並

concat 合併

        var a=[1,2,3],b=[4,5,6];

        var c=a.concat(b);

        console.log(c); //1,2,3,4,5

        console.log(a); //1,2,3 不改變本身

迴圈遍歷

        var arr1=['a','b'];

        var arr2=['c','d','e'];

        for(var i=0;i<arr2.length;i++){

             arr1.push(arr2[i]);

        }

        console.log(arr1); //['a','b','c','d','e']

apply

        合併陣列 arr1 和陣列 arr2,使用 Array.prototype.push.apply(arr1,arr2)  或者 arr1.push.apply(arr1,arr2);

        var arr1=['a','b'];

        var arr2=['c','d','e'];

        Array.prototype.push.apply(arr1,arr2);

        或者

        arr1.push.apply(arr1,arr2);

        console.log(arr1); //['a','b','c','d','e']

物件合併

$.extend()

        var obj1={'a':1};

        var obj2={'b':2};

        var c=$.extend(obj1,obj2);

        console.log(obj1); //{a:1,b:2}; //obj1 已經被修改

        或者

        var obj3=$.extend({},obj1,obj2);

        console.log(obj3); //{a:1,b:2} 不會改變obj1,obj2

遍歷賦值

        var obj1={'a':1};

        var obj2={'b':2,'c':3};

        for(var key in obj2){

             if(obj2.hasOwnProperty(key)===true){

                    // hasOwnProperty 是判斷自有屬性,使用 for in 迴圈遍歷物件的屬性時,

                       原型鏈上的所有屬性都將被訪問會避免原型物件擴充套件帶來的干擾

                    obj1[key]=obj2[key]

             }

        }

Obj.assigin()

        可以把任意多個的源物件自身的可列舉屬性拷貝給目標物件,然後返回目標物件

        使用:Object.assign(target,...source)

        var obj={a:1,b:2}; 

        var copyObj=Object,assign({},obj);

        console.log(copyObj); // {a:1,b:2} 

        var o1={a:1};

        var o2={b:2};

        var o3={c:3};

        var obj=Object.assign(o1,o2,o3);

        console.log(obj); //{a:1,b:2,c:3}; 

        console.log(o1);  //{a:1,b:2,c:3}; 目標物件自身會改變

物件的淺拷貝

        var obj1={'a':1};

        var obj2={'b':{'b1':22,'b2':33}};

        $.extend(obj1,obj2);  //obj1拷貝了obj2的屬性

        console.log(obj1);  //{'a':1,'b'{'b1':22,'b2':33}}

        console.log(obj1.b.b1);  //22

        obj2.b.b1=44;  // obj2被重新賦值

        console.log(ob1.b.b1)  //44 obj.b僅拷貝了物件的指引,所以受原obj2的影響

物件的深拷貝

        var obj1={'a':1};

        var obj2={'b':{'b1':22,'b2':33}};

        $.extend(true,obj1,obj2);  //第一個引數設定為 true 表示深複製

        console.log(obj1);  //{'a':1,'b':{'b1':22,'b2':33}}

        console.log(obj1.b.b1);  //22

        obj2.b.b1=44;  //obj2重新賦值

        console.log(obj1.b.b1);  //22 obj1拷貝的obj2的所有的屬性以及值,並不受obj2的影響

相關推薦

js陣列物件怎麼合併

var list=[{id:1,number:2,title:2},{id:1,number:3,title:2}] function merge (list){ let result=[ ] let cache={ } list.forEach(item=>{

js sort方法根據陣列物件的某一個屬性值進行排序(實用方法)

js sort方法根據陣列中物件的某一個屬性值進行排序 sort方法接收一個函式作為引數,這裡巢狀一層函式用來接收物件屬性名,其他部分程式碼與正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {n

js 根據陣列物件的某一個屬性值進行排序

var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {name:'yjj',age:8} ]; compare = (property) => { return function(a,b){

js sort方法根據陣列物件的某一個屬性值進行排序

sort方法接收一個函式作為引數,這裡巢狀一層函式用來接收物件屬性名,其他部分程式碼與正常使用sort方法相同. var arr = [ {name:'zopp',age:0}, {name:'gpp',age:18}, {name:'yjj',age:8} ]; functio

js陣列簡單去重,js陣列根據物件的元素去重

js陣列簡單去重 var arr1 = [1, 2, 3, 4, 5, 6, 3, 4, 3]; function arrayUnique1(arr) { var result = [], hash

js使用map過濾陣列物件

$(function(){ var users=[ {"name":"nihao","age":20}, {"name":"liming","age":21}, {"name":"zhangsan","age":23}, {"name":"zhaosi",

根據陣列物件的某一個屬性值進行排序

ort方法接收一個函式作為引數,這裡巢狀一層函式用來接收物件屬性名,其他部分程式碼與正常使用sort方法相同 var arr = [ {name:'zopp',likeSum:6}, {name:'gpp',likeSum:6}, {name:'yjj',likeSum:6

js 陣列方法總結

都是基礎 必須掌握! 網上找找資料認認真真敲一邊,算是有了個大概的認識! 改變原陣列的方法(9個): pop()  a.shift()  push()  unshift()  reverse()  splice()  &n

vue陣列物件屬性變化頁面不渲染問題

vue陣列中物件屬性變化頁面不渲染問題:https://www.cnblogs.com/thinkingthigh/p/7789108.html   做checkbox多選功能的時候遇到了一個坑,邏輯怎麼看都對,但是就是有bug,最後發現數組那裡值變了頁面勾選沒有重新渲染。 換了關

fastjson根據json陣列物件的某個欄位進行排序

記錄一下 /** *@Author:vic *@Date:14:59 2018/11/30 *@Description: is_desc-false升序列 is_desc-true降序 */ public static String jsonArraySor

判斷某個元素是否存在於某個 js 陣列

1.正則表示式 Array.prototype.in_array=function(e){ var r=new RegExp(','+e+','); return (r.test(','+th

js陣列的迭代方法

ECMAScript5 為陣列定義5個迭代方法。每個方法都接收兩個引數:要在每一項上執行的函式和執行改函式的作用域物件-影響this的值。傳入這些方法中的函式會接收三個引數:陣列項的值(item)、該項在陣列中的位置(index)和陣列物件本身(array)。 以下方法都不會修改陣列中包含

[轉] 小程式修改陣列物件的某個值或者修改物件

小程式中獲取當前data定義的值,用this.data.xxx setData的時候要修改的值是不需要加this.data.xxx的,直接xxx, 一般直接修改data的值直接修改,修改陣列中物件的值或者物件的屬性值都要先轉為字串再加中括號,如果有變數可以用ES6的模版字串反單引號或者字串拼接一下。

JS陣列的From方法

定義和用法 from() 方法用於通過擁有 length 屬性的物件或可迭代的物件來返回一個數組。 如果物件是陣列返回 true,否則返回 false。 語法 Array.from(object, mapFunction, thisValue) 引數 描述

通過遍歷的方式可以改變陣列物件的值

public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplicatio

js陣列出現次數最多和第二多的元素

整型陣列中出現次數最多和第二多的元素 用雜湊陣列 function f(arr){ var i; var length=arr.length; var hash=[]

JS 陣列有 undefined 值,用 for 迴圈和 for…in 迴圈遍歷的不同之處

先說結論:在陣列遍歷時一般最好使用for迴圈遍歷 var arr=new Array(); arr[0]="P90"; arr[3]="AWM"; arr[5]="AK47"; console.log("//for 迴圈遍歷"); for(let i=0;i<arr

js陣列的find、filter、forEach、map四個方法的詳解和應用例項

陣列中的find、filter、forEach、map四個語法很相近,為了方便記憶,真正的掌握它們的用法,所以就把它們總結在一起嘍。find():返回通過測試的陣列的第一個元素的值在第一次呼叫 callback 函式時會確定元素的索引範圍,因此在 find 方法開始執行之後新

關於JS陣列every與some兩者迭代方法探索

    every()與some()方法都是JS中陣列的迭代方法。every()是對陣列中的每一項執行給定函式,如果該函式對每一項返回true,則返回true。some()是對陣列中每一項執行指定函式

js陣列物件的賦值和引用

   簡要歸納:    1、普通的賦值是複製棧區內容。    2、基本型別的資料在棧區存放資料自身,var a=b; //a與b無關。         引用型別資料在棧區存放資料地址。  var a=b; //a,b聯動    3、基本資料型別包括:undefined,bo