如何使用一些静态值在javascript中对数组进行排序?

Posted

技术标签:

【中文标题】如何使用一些静态值在javascript中对数组进行排序?【英文标题】:How to sort array in javascript using some static value? 【发布时间】:2018-07-08 22:12:35 【问题描述】:
let myArray = ["title":"A", "name":"C", "title":"B", "name":"C++", "title":"C", "name":"Java", "title":"D", "name":"javascript", "title":"E", "name":"Angularjs", "title":"F", "name":"Nodejs", "title":"G", "name":"Express", "title":"H", "name":"html", "title":"I", "name":"HTML", "title":"J", "name":"HTML", "title":"K", "name":"Angularjs", "title":"L", "name":"Javascript", "title":"M", "name":"Nodejs", "title":"N", "name":"Nodejs", "title":"O", "name":"C++"];

现在我想像这样对上面的数组进行排序:- 1.首先来Angularjs数据

    其次,来 Nodejs 数据

    第三,来 Javascript 数据

然后按照数组顺序来

所需的输出将是:-

["title":"E", "name":"Angularjs", "title":"K", "name":"Angularjs",  "title":"F", "name":"Nodejs", "title":"M", "name":"Nodejs", "title":"N", "name":"Nodejs", "title":"D", "name":"Javascript",
"title":"L", "name":"Javascript", "title":"A", "name":"C", "title":"B", "name":"C++", "title":"C", "name":"Java", "title":"H", "name":"HTML", "title":"I", "name":"HTML", "title":"J", "name":"HTML"]

我这样做的解决方案:- 遍历数组,然后在检查所需条件后,将匹配的值放入新数组中。同样,我可以得到想要的输出。

但它需要 4 个循环 Angularjs 的 1 个循环,Nodejs 的第 2 个循环,Javascript 的第 3 个循环,数组的其他值的第 4 个循环,循环值可能会根据我的静态值增加或减少

【问题讨论】:

还有,Angular/Node/JS 数据?请解释一下你的意思 我已经使用了我在回答中提到的循环,但这不是解决问题的好方法。所以这就是为什么我发布相同的@Rajesh @ricky 我在问题中提到过 @Rajesh 表示数组排序按照Angularjs然后nodejs等等进行 Sort array of objects by string property value in JavaScript的可能重复 【参考方案1】:

你可以用一个循环来完成:

let myArray = ["title":"A", "name":"C", "title":"B", "name":"C++", "title":"C", "name":"Java", "title":"D", "name":"Javascript", "title":"E", "name":"Angularjs", "title":"F", "name":"Nodejs", "title":"G", "name":"Express", "title":"H", "name":"HTML", "title":"I", "name":"HTML", "title":"J", "name":"HTML", "title":"K", "name":"Angularjs", "title":"L", "name":"Javascript", "title":"M", "name":"Nodejs", "title":"N", "name":"Nodejs", "title":"O", "name":"C++"];
// create seperate array for angular, node and other
const ang = [];
const node = [];
const js = [];
const other = [];

myArray.forEach(function(v) 
  // push into array based on name
  if (v.name === 'Angularjs')
    ang.push(v)
  else if (v.name === 'Nodejs')
    node.push(v)
  else if (v.name === 'Javascript')
    js.push(v)
  else
    other.push(v);
)

// concat the arrays in the required order
const res = ang.concat(node, js, other);

console.log(res);

更新 1: 使用多维数组而不是多个变量:

let myArray = ["title":"A", "name":"C", "title":"B", "name":"C++", "title":"C", "name":"Java", "title":"D", "name":"Javascript", "title":"E", "name":"Angularjs", "title":"F", "name":"Nodejs", "title":"G", "name":"Express", "title":"H", "name":"HTML", "title":"I", "name":"HTML", "title":"J", "name":"HTML", "title":"K", "name":"Angularjs", "title":"L", "name":"Javascript", "title":"M", "name":"Nodejs", "title":"N", "name":"Nodejs", "title":"O", "name":"C++"];
// create seperate array for angular, node and other
const temp = [[],[],[],[]]

myArray.forEach(function(v) 
  // push into array based on name
  if (v.name === 'Angularjs')
    temp[0].push(v)
  else if (v.name === 'Nodejs')
    temp[1].push(v)
  else if (v.name === 'Javascript')
    temp[2].push(v)
  else
    temp[3].push(v);
)

// concat the arrays in the required order
const res = [].concat(...temp);

// or [].concat.apply([], temp)

console.log(res);


更新 2: 使用对象引用来避免 if...else

let myArray = ["title":"A", "name":"C", "title":"B", "name":"C++", "title":"C", "name":"Java", "title":"D", "name":"Javascript", "title":"E", "name":"Angularjs", "title":"F", "name":"Nodejs", "title":"G", "name":"Express", "title":"H", "name":"HTML", "title":"I", "name":"HTML", "title":"J", "name":"HTML", "title":"K", "name":"Angularjs", "title":"L", "name":"Javascript", "title":"M", "name":"Nodejs", "title":"N", "name":"Nodejs", "title":"O", "name":"C++"];

// create seperate array for angular, node and other
const temp = [
  [],
  [],
  [],
  []
];
const ref = 
  'Angularjs': 0,
  'Nodejs': 1,
  'Javascript': 2
;

myArray.forEach(function(v) 
  temp[v.name in ref ? ref[v.name] : 3].push(v);
)

// concat the arrays in the required order
const res = [].concat(...temp);

// or [].concat.apply([], temp)

console.log(res);

【讨论】:

如果这是解决方案,我们是否应该以如何按属性对对象数组进行排序来关闭帖子? @pranav 你忘记在排序中添加javascript @Rajesh : 如果我们使用正常排序,它不会保持 ramaining 的顺序 .... Then afterwards come according to array order @PranavCBalan 正确。花了一段时间才意识到。 +1

以上是关于如何使用一些静态值在javascript中对数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 数组中对格式项目进行编号

如何在javascript中对多维数组进行排序

如何在JavaScript中对二维数组进行排序?

如何在javascript中对嵌套的对象数组进行排序?

如何在javascript中对字母数字数组进行排序[重复]

如何使用Javascript等待值在html中更改[重复]