鍍金池/ 問(wèn)答/HTML/ 用對(duì)象來(lái)儲(chǔ)存數(shù)據(jù)時(shí)如何快速操作

用對(duì)象來(lái)儲(chǔ)存數(shù)據(jù)時(shí)如何快速操作

原先在 reactreducer 中儲(chǔ)存的數(shù)據(jù)都是以 JSON 的格式來(lái)儲(chǔ)存的,現(xiàn)在想換成用 Object 的儲(chǔ)存方式來(lái)提高操作時(shí)的速度,不知道是否有一定的可行性?如果確實(shí)可行,又如何快速的操作 reducer 上的數(shù)據(jù)呢?

// 原先的數(shù)據(jù)結(jié)構(gòu)
[{
    id: xxx,
    name: xx,
    age: x
}, {
    // ..
}]

// 改變后的數(shù)據(jù)格式

{
    xxx: {// 這里的 key值 xxx 就是 id 
        id: xxx,
        name: xx,
        age: x
    },
    //...
}

原先對(duì)于數(shù)據(jù) JSON 的操作上:
增:Array.prototype.concat、Array.prototype.push...
改:Array.prototype.mapArray.prototype.filter...
刪: Array.prototype.slice、Array.prototype.map...
查: Array.prototype.map...

更改后的字典數(shù)據(jù)操作:
增:??
改:??
刪:??
查:Object[key]取值


我還是補(bǔ)充點(diǎn)內(nèi)容吧

// 原先store的設(shè)計(jì)可能是這樣的:
{
  user: [{id: xxx, name: xx, age: x}]
}

// 這樣我對(duì)于user的`增刪改查`都可以使用數(shù)組提供的方法來(lái)操作。
// 更改后的store設(shè)計(jì):
{
  user: {
    xxx: {
      id: xxx,
      name: xx,
      age: x
    }
  }
}

// 改完之后對(duì)數(shù)據(jù)的 `改刪查` 就可以避免像數(shù)組一樣,每次都要去遍歷。
// 所以我要問(wèn)的是, **對(duì)于對(duì)象的增刪改查有沒(méi)有一種快速操作的方法**,這里必須要考慮操作之后的指針問(wèn)題
回答
編輯回答
離夢(mèng)

兩種都是json吧,不信你拿json格式化工具試試
在項(xiàng)目中要改,估計(jì)redcuer,還有mapStateToProps都要改了。
依你的數(shù)據(jù)將數(shù)據(jù)轉(zhuǎn)對(duì)象的方法:

let oldArray = [
  {id: 1, field_id: 10, data: "215", member_id: 101},
  {id: 12, field_id: 2, data: "215212", member_id: 101},
  {id: 2, field_id: 31, data: "123", member_id: 101}
];

let obj = {};

for(const o of oldArray) {
  obj[o.id] = o;
}

console.log(obj)
2018年6月22日 10:24
編輯回答
卟乖

用 object 好處比較多,最突出的應(yīng)該就是利于擴(kuò)展,如果日后希望給 store 多一個(gè)字段,object 可以輕松擴(kuò)展而 array 可能要費(fèi)一番功夫。

對(duì)于 store 里面具體的內(nèi)容,一般來(lái)說(shuō)都是以一個(gè) key 作為最小操作對(duì)象,不會(huì)操作嵌套過(guò)深的數(shù)據(jù)。key 的結(jié)果一般也都是 string 或者 array,當(dāng)然也是按照對(duì)應(yīng)的操作增刪改查了,增也只是給 object 下某一個(gè) key 的 array 增,同理改刪查也都是這樣的操作。

2018年2月12日 06:21