将数组元素从一个位置移动到另一个有条件的位置

Move an array element from a position to another with condition

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

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

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

尝试用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))

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 的第一个元素的索引。

请看下面fiddle.

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

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

    Live Example

虽然你喜欢对数组进行排序,但我建议直接使用比较的增量而不使用conditional operator。这一解决方案的优点是,它适用于数组中的多个对象。具有相同 key/value 对的所有项目都排在顶部。

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; }