js数组怎么按属性值为字符串的元素排序?
如:array=【{name:“张三”},{name:“李四”),{name:“王五”}】怎样将array按name排序...
如:array=【
{name:“张三”},
{name:“李四”),
{name:“王五”}
】
怎样将array按name排序 展开
{name:“张三”},
{name:“李四”),
{name:“王五”}
】
怎样将array按name排序 展开
2个回答
展开全部
首先,将数组的name的值作为元素创建一个新数组,然后进行排序,然后按照新数组的值对应找到旧数组的对应元素,并将其添加至一个新创建的数组,旧数组的此元素删除。代码如下:
let oldArr = [{name:"张三"},{name:"李四"},{name:"王五"}];
let newArr1 = new Array(oldArr.length);
for(i = 0 ; i < oldArr.length; i++){
newArr1[i] = oldArr[i].name;
}
newArr1.sort();
let newArr2 = new Array();
for(i=0;i<newArr1.length;i++){
for(j=0;j<oldArr.length;j++){
if(newArr1[i] == oldArr[j].name){
newArr2.push(oldArr.splice(j,1));
}
}
}
// 最后这个newArr2就是你要的排序后结果
// 注意:原来的oldArr此时应该成为一个空数组了
let oldArr = [{name:"张三"},{name:"李四"},{name:"王五"}];
let newArr1 = new Array(oldArr.length);
for(i = 0 ; i < oldArr.length; i++){
newArr1[i] = oldArr[i].name;
}
newArr1.sort();
let newArr2 = new Array();
for(i=0;i<newArr1.length;i++){
for(j=0;j<oldArr.length;j++){
if(newArr1[i] == oldArr[j].name){
newArr2.push(oldArr.splice(j,1));
}
}
}
// 最后这个newArr2就是你要的排序后结果
// 注意:原来的oldArr此时应该成为一个空数组了
追问
newArr1.sort();是无效的,并不能将newArr1按拼音排序,而且我虽然只写了name一个属性,但是并不一定只有name,如果有重名怎么办
追答
你应该看到,我使用的是splice这个函数,就是为了当有重复时,会首先删除第一个找到的对应对象,并将他追加至newArr2中,那么在此查询找到的就是第二个对象了。你若是了解的话,应该知道splice是如何操作的。
至于你说数组内元素对象可能包含多个属性(如:{name:"zhangsan",sex:"nan"}),这不会对此段代码有任何影响,因为我判断用的时name属性值,而添加之结果数组的是整个对象。
最后,你说sort方法无效,因为你并没有说明是按照何种规则排序,所以我用了sort这个函数;你也可以自定义一个排序方法,或者直接使用sort(function(){})来实现。
展开全部
from a in arr orderby a.Length descending select a Array.Sort(arr, delegate(string s1, string s2) { return s1.Length-s2.Length; });Array.Sort(arr, (Comparison<int>)delegate(string s1, string s2) { ...}); 查看原帖>>
希望采纳
希望采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询