数组排序

___紫菜 2018-06-22 10:39:31
var data=[{id:123,pid:0,name:"第一家族爷爷"},{id:234,pid:0,name:"第二家族爷爷"},{id:234567,pid:2345,name:"第二家族孙子"},{id:345,pid:0,name:"第三家族爷爷"},{id:2345,pid:234,name:"第二家族儿子"},{id:3456,pid:345,name:"第三家族儿子"},{id:1234,pid:123,name:"第一家族儿子"},{id:34567,pid:345,name:"第三家族儿子"},{id:23456,pid:234,name:"第二家族儿子"},{id:12345,pid:1234,name:"第一家族孙子"}]


这里有个三级关系的json数据,根据爷爷/儿子/孙子的层级排序 家族先后顺序不管,哪个家族在前面就先排哪个家族/
...全文
162 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
___紫菜 2018-06-22
  • 打赏
  • 举报
回复
引用 1 楼 foren_whb 的回复:
给你一个参考,自己改改吧
list.sort(function (a, b) {
if (a.num == b.num ){
return a.type > b.type ? 1 : a.type < b.type ? -1 : 0;
} else if (a.num > b.num ) {
return 1;
} else {
return -1;
}
})
___紫菜 2018-06-22
  • 打赏
  • 举报
回复
引用 楼主 u013116426 的回复:
var data=[{id:123,pid:0,name:"第一家族爷爷"},{id:234,pid:0,name:"第二家族爷爷"},{id:234567,pid:2345,name:"第二家族孙子"},{id:345,pid:0,name:"第三家族爷爷"},{id:2345,pid:234,name:"第二家族儿子"},{id:3456,pid:345,name:"第三家族儿子"},{id:1234,pid:123,name:"第一家族儿子"},{id:34567,pid:345,name:"第三家族儿子"},{id:23456,pid:234,name:"第二家族儿子"},{id:12345,pid:1234,name:"第一家族孙子"}]


这里有个三级关系的json数据,根据爷爷/儿子/孙子的层级排序 家族先后顺序不管,哪个家族在前面就先排哪个家族/

最好是能用递归
丰云 2018-06-22
  • 打赏
  • 举报
回复
给你一个参考,自己改改吧
list.sort(function (a, b) {
if (a.num == b.num ){
return a.type > b.type ? 1 : a.type < b.type ? -1 : 0;
} else if (a.num > b.num ) {
return 1;
} else {
return -1;
}
})
Logerlink 2018-06-22
  • 打赏
  • 举报
回复
引用 9 楼 u013116426 的回复:
name不一定叫这个名字,是可以修改的可以叫任意的名字。我这样写是为了方便看层级关系

所以 还是要数据的问题
数据结构不够完整 在后端为每个对象加分别加一个一个分类标识吧
天际的海浪 2018-06-22
  • 打赏
  • 举报
回复
引用 8 楼 u013116426 的回复:
[quote=引用 6 楼 jslang 的回复:]

var data=[{id:123,pid:0,name:"第一家族爷爷"},{id:234,pid:0,name:"第二家族爷爷"},{id:234567,pid:2345,name:"第二家族孙子"},{id:345,pid:0,name:"第三家族爷爷"},{id:2345,pid:234,name:"第二家族儿子"},{id:3456,pid:345,name:"第三家族儿子"},{id:1234,pid:123,name:"第一家族儿子"},{id:34567,pid:345,name:"第三家族儿子"},{id:23456,pid:234,name:"第二家族儿子"},{id:12345,pid:1234,name:"第一家族孙子"}]

var p = {"爷爷":3,"儿子":2,"孙子":1};
data.sort(function(a,b){
return p[b.name.slice(-2)]-p[a.name.slice(-2)];
});

alert(JSON.stringify(data,null,4));


我的name是可以修改的[/quote]
怎么修改法,有什么规律
___紫菜 2018-06-22
  • 打赏
  • 举报
回复
引用 7 楼 Logerlink 的回复:

window.onload = function(){
let typeArr = ['爷爷','儿子','孙子']
let typeTranArr = ['grandpa','son','sonson']
let result = {
grandpa: [],
son: [],
sonson: []
}
data.forEach( item => {
typeArr.forEach((type, index) => {
if (item.name.indexOf(type) >= 0) {
result[typeTranArr[index]].push(item)
}
})
})
let newData = []
typeTranArr.forEach(item => {
newData = newData.concat(result[item])
})
console.log(newData)
}

name不一定叫这个名字,是可以修改的可以叫任意的名字。我这样写是为了方便看层级关系
___紫菜 2018-06-22
  • 打赏
  • 举报
回复
引用 6 楼 jslang 的回复:

var data=[{id:123,pid:0,name:"第一家族爷爷"},{id:234,pid:0,name:"第二家族爷爷"},{id:234567,pid:2345,name:"第二家族孙子"},{id:345,pid:0,name:"第三家族爷爷"},{id:2345,pid:234,name:"第二家族儿子"},{id:3456,pid:345,name:"第三家族儿子"},{id:1234,pid:123,name:"第一家族儿子"},{id:34567,pid:345,name:"第三家族儿子"},{id:23456,pid:234,name:"第二家族儿子"},{id:12345,pid:1234,name:"第一家族孙子"}]

var p = {"爷爷":3,"儿子":2,"孙子":1};
data.sort(function(a,b){
return p[b.name.slice(-2)]-p[a.name.slice(-2)];
});

alert(JSON.stringify(data,null,4));


我的name是可以修改的
Logerlink 2018-06-22
  • 打赏
  • 举报
回复

window.onload = function(){
let typeArr = ['爷爷','儿子','孙子']
let typeTranArr = ['grandpa','son','sonson']
let result = {
grandpa: [],
son: [],
sonson: []
}
data.forEach( item => {
typeArr.forEach((type, index) => {
if (item.name.indexOf(type) >= 0) {
result[typeTranArr[index]].push(item)
}
})
})
let newData = []
typeTranArr.forEach(item => {
newData = newData.concat(result[item])
})
console.log(newData)
}
天际的海浪 2018-06-22
  • 打赏
  • 举报
回复

var data=[{id:123,pid:0,name:"第一家族爷爷"},{id:234,pid:0,name:"第二家族爷爷"},{id:234567,pid:2345,name:"第二家族孙子"},{id:345,pid:0,name:"第三家族爷爷"},{id:2345,pid:234,name:"第二家族儿子"},{id:3456,pid:345,name:"第三家族儿子"},{id:1234,pid:123,name:"第一家族儿子"},{id:34567,pid:345,name:"第三家族儿子"},{id:23456,pid:234,name:"第二家族儿子"},{id:12345,pid:1234,name:"第一家族孙子"}]

var p = {"爷爷":3,"儿子":2,"孙子":1};
data.sort(function(a,b){
return p[b.name.slice(-2)]-p[a.name.slice(-2)];
});

alert(JSON.stringify(data,null,4));

本人QQ-554433626 2018-06-22
  • 打赏
  • 举报
回复

function array_contain(array, obj){
for (var i = 0; i < array.length; i++){
if (array[i].name.indexOf(obj)>-1)//如果要求数据类型也一致,这里可使用恒等号===
return array[i];
}
return "";
}
sort(data);
console.log(sortData);
本人QQ-554433626 2018-06-22
  • 打赏
  • 举报
回复

var data=[{id:123,pid:0,name:"第一家族爷爷"},{id:234,pid:0,name:"第二家族爷爷"},{id:234567,pid:2345,name:"第二家族孙子"},{id:345,pid:0,name:"第三家族爷爷"},{id:2345,pid:234,name:"第二家族儿子"},{id:3456,pid:345,name:"第三家族儿子"},{id:1234,pid:123,name:"第一家族儿子"},{id:34567,pid:345,name:"第三家族儿子"},{id:23456,pid:234,name:"第二家族儿子"},{id:12345,pid:1234,name:"第一家族孙子"}];
var sortData = new Array();
function sort(data){
var arry = array_contain(data,"爷爷");
if(arry !== ""){
sortData.push(arry);
data.splice($.inArray(arry, data), 1);
}else{
arry = array_contain(data,"儿子");
if(arry !== ""){
sortData.push(arry);
data.splice($.inArray(arry, data), 1);
}else{
arry = array_contain(data,"孙子");
if(arry !== ""){
sortData.push(arry);
data.splice($.inArray(arry, data), 1);
}else{
if(data.length>0){
sortData.push(data);
}
return;
}
}
}
sort(data);
};
function array_contain(array, obj){
for (var i = 0; i < array.length; i++){
if (array[i].name.i

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧