Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/444.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Immutable.js中按特定键对orderedMap进行排序_Javascript_Sorting_Immutable.js - Fatal编程技术网

Javascript 在Immutable.js中按特定键对orderedMap进行排序

Javascript 在Immutable.js中按特定键对orderedMap进行排序,javascript,sorting,immutable.js,Javascript,Sorting,Immutable.js,请检查这个 如何按键顺序对orderedMap对象进行降序排序?我知道有一个sortBy方法,但没有给出一个更清晰的例子 这是我最初的目标: var props = { "item": { "A": { "sequence": 5 }, "B": { "sequence": null }, "C":{ "sequence": 2 } } } 我希望结果是: var props = { "item":

请检查这个

如何按键
顺序对
orderedMap
对象进行降序排序?我知道有一个
sortBy
方法,但没有给出一个更清晰的例子

这是我最初的目标:

var props = {
  "item": {
    "A": {
      "sequence": 5
    },
    "B": {
      "sequence": null
    },
    "C":{
      "sequence": 2
    }
  }
}
我希望结果是:

var props = {
  "item": {
    "A": {
      "sequence": 5
    },
    "C":{
      "sequence": 2
    },
    "B": {
      "sequence": null
    }
  }
}
示例代码:

var data = Immutable.fromJS(props,(key, value)=>{
     var isIndexed = Immutable.Iterable.isIndexed(value);
     return isIndexed ? value.toList() :value.toOrderedMap();
});

var sorted = data.get('item').sortBy((item) => item.get('sequence'));

console.log(sorted.toJS())

您提供给
sortBy()
的函数是comparator,它需要返回一个数字。通过在
项.get('sequence')
前面添加减号,或在结果后面添加
reverse()
可以反转排序,获得所需的输出

下面是一个例子:

var sorted = data.get('item').sortBy((item) => -item.get('sequence'));
// or var sorted = data.get('item').sortBy((item) => item.get('sequence')).reverse();
// you can now use .map() to go through your OrderedMap which has been
// sortbed by the sequence property and would look like your desired output
请注意,您使用的是OrderedMap,只需调用
sorted.toJS()
就会返回一个常规的JS对象,其中键显然没有排序

// If you need to iterate through the map and return some 
// plain JS you can do something like:
sorted.map(x => x.get('sequence')).toJS()
// => Object {A: 5, C: 2, B: null}
,在
toJS()
之后,排序顺序在少数情况下得到维护,但并不总是如此。