如何从具有订单号的值创建有序数组

How to create an ordered array from values that have an order number?

本文关键字:创建 序数 数组 订单号      更新时间:2023-09-26

所以我有一系列字符串,其中包含图像路径和顺序#连接。

它们是这样的:

const images = [
  'photo1.jpg,0'
  'photo2.jpg,2'
  'photo3.jpg,1'
]

所以正确的顺序应该是:photo1, photo3, photo2

我需要做的是将它处理成一个只有路径值的正确排序的数组。所以最终我需要:

const orderedImages = [
  'photo1.jpg'
  'photo3.jpg'
  'photo2.jpg'
]

最好的方法是什么?

您可以使用array.sort对它们进行排序,使用array.map删除顺序值。

const images = [
  'photo1.jpg,0',
  'photo2.jpg,2',
  'photo3.jpg,1'
]
var output = images.sort(function(a,b){
  return +a.split(',')[1] - +b.split(',')[1]
}).map(function(item){
  return item.split(',')[0]
});
console.log(output)

您可以拆分这些值并分配给给定的索引。

var images = ['photo1.jpg,0', 'photo2.jpg,2', 'photo3.jpg,1'],
    array = [];
images.forEach(function (a) {
    var aa = a.split(',');
    array[aa[1]] = aa[0];
});
console.log(array);

使用Lodash,只需写:

var orderedImages = _(images)
  .sortBy(function(element) { return element.split[','][1] ; })
  .map(function(element) { return element.split[','][0]; })
  .value();

试试这个方法

var images = [
  'photo1.jpg,0',
  'photo2.jpg,2',
  'photo3.jpg,1'
];
images.sort(function(a,b){
   return Number(a.split(",")[1]) - Number(b.split(",")[1])
});
var orderedImages = images.map(function(item){
  return item.split(",")[0];
});
console.log(orderedImages);

首先使用 Array#sort 对元素进行排序,然后使用 Array#map 方法对元素进行更新。

var images = [
    'photo1.jpg,0',
    'photo2.jpg,2',
    'photo3.jpg,1'
  ]
  // sort the element
  .sort(function(a, b) {
    // split the element and calculate 
    // return value based on that
    return a.split(',')[1] - b.split(',')[1];
    // iterate and generate new array with updated value
  }).map(function(v) {
    // generate array elemnt by removing the number part
    return v.split(',')[0]
  })
console.log(images)


带有ES6箭头功能

var images = [
  'photo1.jpg,0',
  'photo2.jpg,2',
  'photo3.jpg,1'
].sort((a, b) => a.split(',')[1] - b.split(',')[1]).map(v => v.split(',')[0])
console.log(images)