【发布时间】:2018-12-18 18:18:55
【问题描述】:
我想对我的动态数据进行排序,以便如果它包含特定字符串,则将其推送到列表项的顶部。然后把剩下的推进去。我很困惑如何去做。
所以我有类似的东西
因此,如果它包含概述,请将其推到前面,然后再推。我对如何做到这一点有点困惑。
【问题讨论】:
-
您能否发布示例输入和预期输出?
标签: javascript arrays reactjs sorting
我想对我的动态数据进行排序,以便如果它包含特定字符串,则将其推送到列表项的顶部。然后把剩下的推进去。我很困惑如何去做。
所以我有类似的东西
因此,如果它包含概述,请将其推到前面,然后再推。我对如何做到这一点有点困惑。
【问题讨论】:
标签: javascript arrays reactjs sorting
您可以简单地将reduce 与unshift 和push 方法结合使用,以返回一个新数组,该数组根据每个对象的value 是否包含“概述”来组织自身:
tree.reduce( (acc, cv) => !cv.value.includes( "overview" ) ?
(acc.push(cv), acc) :
(acc.unshift(cv), acc ), []);
//data setup
let tree = ["A","B","overview","C","D","overview","E","overview"].map(_=>Object({value:_}));
//result
let result = tree.reduce((acc, cv) =>
!cv.value.includes( "overview" ) ?
(acc.push(cv), acc) :
(acc.unshift(cv), acc ), []);
console.log( result);
【讨论】:
您的代码可以通过 unshift 调用将任何带有“概览”的内容推到前面。您不需要最后一次推送调用,因为数组已通过 unshift 就地修改。
【讨论】:
你可以使用 Array.prototype.sort() 方法
const values = [
{ value: 'foo' },
{ value: 'bar' },
{ value: 'baz' },
{ value: 'overview' },
]
function toFront(arr, search) {
return arr.sort(a => -a.value.includes(search))
}
console.log(toFront(values, 'overview'))
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
【讨论】:
您可以使用reduce 填充两个数组,每个类别一个,并在最后加入它们:
// Input
const tree = [{value: "A"},{value:"B"},{value:"overview"},{value:"C"},{value:"D"},{value:"overview"},{value:"E"},{value:"overview"}];
// Transformation
const result = [].concat(...tree.reduce(
(acc, obj) => (acc[1-obj.value.includes("overview")].push(obj), acc),
[[], []]
));
console.log( result);
【讨论】: