【问题标题】:How to move the objects to the top inside array based on the matched key如何根据匹配的键将对象移动到数组内部的顶部
【发布时间】:2022-01-13 05:44:55
【问题描述】:

我有一个具有不同键的对象数组我想根据我想要的键将对象移动到顶部。

根据状态给定数组:“活动”我希望将所有匹配的对象移到顶部

[
   {name: "abc", age: "20", status: "Active"}, 
   {name: "xyz", age: "21", status: "Inactive"}, 
   {name: "pqr", age: "22", status: "Active"}
]

预期输出:

[
   {name: "abc", age: "20", status: "Active"}, 
   {name: "pqr", age: "22", status: "Active"}, 
   {name: "xyz", age: "21", status: "Inactive"}
]

【问题讨论】:

    标签: javascript node.js reactjs angularjs


    【解决方案1】:

    let list = [{
      name: "abc",
      age: "20",
      status: "Active"
    }, {
      name: "xyz",
      age: "21",
      status: "Inactive"
    }, {
      name: "pqr",
      age: "22",
      status: "Active"
    }]
    list.sort((a, b) => (a.status !== "Active") ? 1 : -1)
    console.log(list)

    产生以下输出

    [
      { name: 'pqr', age: '22', status: 'Active' },
      { name: 'abc', age: '20', status: 'Active' },
      { name: 'xyz', age: '21', status: 'Inactive' }
    ]
    

    【讨论】:

    • 要添加更多答案,您可以使用sort 函数来定义它们出现的顺序。返回值定义哪个元素将首先出现在排序数组中。我建议在这里阅读文档developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
    • 没有必要将排序后的结果赋值给list,因为The sort() method sorts the elements of an array in place...
    【解决方案2】:

    您可以像这样更改您的代码。

    function handleData(arr, status) {
       if(!arr || arr.length == 0) return
       for(let i=0; i<arr.length; i++) {
        let item = arr[i];
        if(item.status == status) {
          arr.splice(i, 1);
          arr.unshift(item)
        }
       }
    }
    let arr = [{name: "abc", age: "20", status: "Active"}, {name: "xyz", age: "21", status: "Inactive"}, {name: "pqr", age: "22", status: "Active"}]
    
    handleData(arr, 'Active')

    【讨论】:

      【解决方案3】:

      数组有 Array.sort 方法,您可以在其中传递返回 1, -1 or 0 的函数,该函数对应于如何移动数组元素

      const arr = [{
        name: "abc",
        age: "20",
        status: "Active"
      }, {
        name: "xyz",
        age: "21",
        status: "Inactive"
      }, {
        name: "pqr",
        age: "22",
        status: "Active"
      }]
      console.log(arr.sort((a, b) => (a.status === b.status) ? 0 : a.status === "Active" ? -1 : 1))

      【讨论】:

      • Tidy 更好的结果。这提高了可读性...
      猜你喜欢
      • 1970-01-01
      • 2017-01-29
      • 2013-06-15
      • 2021-11-27
      • 1970-01-01
      • 1970-01-01
      • 2021-09-28
      • 2011-05-07
      • 2023-03-26
      相关资源
      最近更新 更多