如何使用一些静态值在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中对数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章