在ramda.js中,fromPairs是否会改变元素的顺序?

时间:2017-05-25 15:08:53

标签: ramda.js

我收到大量的对:[number, {number,number, big array of numbers}]

首先,我将主要对添加到数组的开头:

prepend([target[0], {count : target[1].length, overall : target[1].length, items:target[1]}]),

接下来我做:

  Promise.all([                                        
          to_file_json(
          token.user_id,
          'connections_data',
          JSON.stringify(
          fromPairs(r[0])
          ))...   

我可以在文件中间找到我的主要对。

所以我的问题是,fromPairs可能会改变顺序吗?如果是,我该怎么做才能防止这种情况发生?

编辑:

其他信息:

1)r变量对应[[number, Friends][], Float64Array[]]

2)target变量对应[number,number[]]

3)我前面提到的元素的开头,它始终是最大的元素,它以某种方式位于文件的中间。

"136444868":{"count":304,"overall":304,"items":[19363,234566,290677,1375661,2030175,2131497,2593602,2596894,2816890,2869895,3170377,3437884,3486703,3504543,4046799,4235623,5366101.....

4)朋友类型:

interface Friends {
    count:number,   
    overall:number,
    items:number[]  
   };

示例数据

{
    "19363":{"count":5,"overall":3088,"items":[51177198,53119509,136035431,209482119,216378147]}

    ,"234566":{"count":6,"overall":6803,"items":[290677,3504543,23180680,75311610,178479726,196401211]}

    ,"290677":{"count":19,"overall":2213,"items":[234566,5686439,7873089,11175816,13726459,20697213,23180680,27419631,55209039,74493674,75311610,125041200,133272552,139307068,159591583,168386810,173599247,178429642,189097165]}


    ,"1375661":{"count":0,"overall":76,"items":[]},"2030175":{"count":14,"overall":86,"items":[2596894,6507568,11681736,17736119,49557638,117771194,127144880,141523415,147264238,153044182,156925389,160656334,223530741,262311445]},"2131497":{"count":16,"overall":301,"items":[13598979,15682478,20357560,20869716,27419631,30869837,33650605,40129023,68976427,88146695,90648231,101105191,118193129,145163503,216503667,387266562]},

1 个答案:

答案 0 :(得分:4)

我预计问题在于您执行prepend而不从列表中的后续位置删除该元素。

然后你可能会得到一些数据:

[
  [ 2131497, { count: 16, overall: 301, items: [ /* .. * ] } ],  // duplicate
  [ 19363, { count: 5, overall: 3088, items: [ /* .. * ] } ],
  [ 234566, { count: 6, overall: 6803, items: [ /* .. * ] } ],
  [ 290677, { count: 19, overall: 2213, items: [ /* .. * ] } ],
  [ 1375661, { count: 0, overall: 76, items: [ /* .. * ] } ],
  [ 2030175, { count: 14, overall: 86, items: [ /* .. * ] } ],
  [ 2131497, { count: 16, overall: 301, items: [ /* .. * ] } ]   // duplicate
]

然后,当您执行fromPairs时,更高版本将覆盖之前的版本,并且它将最终返回到原始位置的列表中,如文档中的以下行所示:

  

如果一个键出现在多个对中,则最右边的一对包含在对象中。

但是......即使你修复了这个问题,你仍然无法得到你想要的行为,因为对象属性iteration order specification表示对象的整数键首先按数字顺序迭代,在非整数键之前。 Axel Rauschmayer非常readable description

这些复杂性是Ramda(免责声明:我是其中一位作者)尚未创建foldObj实施的原因之一。