【问题标题】:Move an array element from a position to another with condition使用条件将数组元素从一个位置移动到另一个位置
【发布时间】:2017-11-04 17:44:27
【问题描述】:

我正在寻找一种快速而可靠的方法来将数组的元素移动到堆栈的顶部。我的情况是: 我有一个这样的对象数组:

array = [{label: yu, value: uy}, {label: EUR, value: EUR}, {label: CY, value: CY}].

我想将值为 EUR 的元素移动到数组的顶部,以便成为第一个元素。如何做到这一点?

【问题讨论】:

    标签: javascript arrays data-manipulation


    【解决方案1】:

    尝试使用Array#sort() 比较与EUR 匹配的值。其匹配集与数组中的第一个位置

    var array = [{ label: 'yu', value: 'uy'},  { label: 'EUR', value: 'EUR'  },{ label: 'CY', value: 'CY' }]
    
    console.log(array.sort((a, b) => a.value == 'EUR' ? -1 : b.value == 'EUR' ? 1 : 0))

    【讨论】:

      【解决方案2】:
      arr= [{label: "yu", value:" uy"}, {label:"EUR", value:"EUR"}, {label: "CY", value: "CY"}];
      
      
      
        arr.splice(0,0,arr.splice(arr.findIndex(el=>el.label==="EUR"),1));
      
      console.log(arr);
      

      Splice 将元素移出/推入数组。

      arr.splice(0,0,el);
      

      将el添加到第一个位置。

      arr.splice(i,1);
      

      删除 i 处的元素。

      arr.findIndex(el=>el.label===" EUR");
      

      查找第一个带有 EUR 标签的元素的索引。

      【讨论】:

        【解决方案3】:

        请看下面的小提琴。

        1. 确定要移动的元素的索引。
        2. 只需删除该元素并取消移动数组。

          array.unshift(array.splice(index,1)[0]);

          Live Example

        【讨论】:

          【解决方案4】:

          虽然您喜欢对数组进行排序,但我建议直接使用比较的增量而不使用conditional operator。此解决方案的优点是,它适用于数组中的多个对象。具有相同键/值对的所有项目都排在最前面。

          const toTop = (key, value) => (a, b) => (b[key] === value) - (a[key] === value);
          let array = [{ label: 'yu', value: 'uy' }, { label: 'EUR', value: 'EUR' }, { label: 'CY', value: 'CY' }];
          
          array.sort(toTop('value', 'EUR'));
          
          console.log(array);
          .as-console-wrapper { max-height: 100% !important; top: 0; }

          【讨论】:

          • 你好,这里不是传递一个像 'EUR' 这样的值,如果我想传递值数组说 ['EUR', 'CY'] 并且这里对象需要根据值数组进行排序..在这种情况下,方法是什么..
          • @Roy,您可以先获取索引并按此值排序,如果不存在,则取一个较大的值将所有其他项排序到数组的末尾。
          猜你喜欢
          • 2011-07-15
          • 2023-03-29
          • 2013-06-28
          • 2017-10-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多