按字符串值对数组进行排序

时间:2017-06-27 21:26:19

标签: javascript arrays sorting

如何按字符串值对数组进行排序?

如果我有一个像['you', 'I', 'me', 'me', 'will', 'me']这样的数组,怎样才能在数组的前面得到所有带有me字样的索引?

我尝试过使用array.sort,但它似乎没有用。

e.target.value是我从dom中的<select元素获得的值。

arr.sort((a, b) => {
    if (a < e.target.value) {
        return -1;
    }
    if (a > e.target.value) {
        return 1;
    }

    return 0;
});

更新: Yury的答案非常有效,但是如果我需要在一个对象数组中匹配两个值并将它们排序,那该怎么办呢?

示例:

arr = [
  {id: 1, name: "cookie"}, 
  {id: 2, name: 'foo'}, 
  {id: 3, name: 'bar'}, 
  {id: 2, name: 'foo'}
];

如何在数组前面放置id为'2'且名称为'foo'的所有元素?

2 个答案:

答案 0 :(得分:4)

您可以使用排序

let a = ['you', 'I', 'me', 'me', 'will', 'me'];

a.sort((a, b) => a !== b && b === 'me' ? 1 : 0);

console.log(a)

答案 1 :(得分:0)

const arr = [
  {id: 1, name: "cookie"},
  {id: 2, name: 'foo'},
  {id: 3, name: 'bar'},
  {id: 2, name: 'foo'}
];

使用Array.prototype.sort()上的arr方法使用回调函数,只有当第一个项目与给定条件不匹配且第二个条件符合时,才会切换项目的顺序。

arr.sort((item1, item2) => {
  if((item1.id !== 2 || item1.name !== 'foo') && (item2.id === 2 || item2.name === 'foo')) {
    return 1;
  }

  return 0;
});

console.log(arr);