【问题标题】:How to order list item and push something to the beginning of array如何订购列表项并将某些内容推送到数组的开头
【发布时间】:2018-12-18 18:18:55
【问题描述】:

我想对我的动态数据进行排序,以便如果它包含特定字符串,则将其推送到列表项的顶部。然后把剩下的推进去。我很困惑如何去做。

所以我有类似的东西

因此,如果它包含概述,请将其推到前面,然后再推。我对如何做到这一点有点困惑。

【问题讨论】:

  • 您能否发布示例输入和预期输出?

标签: javascript arrays reactjs sorting


【解决方案1】:

您可以简单地将reduceunshiftpush 方法结合使用,以返回一个新数组,该数组根据每个对象的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);

【讨论】:

    【解决方案2】:

    您的代码可以通过 unshift 调用将任何带有“概览”的内容推到前面。您不需要最后一次推送调用,因为数组已通过 unshift 就地修改。

    【讨论】:

      【解决方案3】:

      你可以使用 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

      【讨论】:

        【解决方案4】:

        您可以使用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);

        【讨论】:

        • 所以实际上我有一个函数正在遍历对象数组。我想在该函数内部检查它正在迭代的当前对象的值是否是“概述”,如果是,则将其推到顶部。之后推其余的。如果没有概述而不是忽略。我会更新我的代码来告诉你我在说什么
        • 嗨,我已经更新了我的代码。我需要帮助的部分我把 // 在我的代码中表明这是我想要进行检查的地方。
        猜你喜欢
        • 1970-01-01
        • 2010-09-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-16
        相关资源
        最近更新 更多