var data = [{
id: '_A2',
color: '#00ff00',
parent: {
parent_id: '_A1'
},
created: 1.1
}, {
id: '_A4',
color: '#bf1616',
parent: null,
created: 1.1
}, {
id: '_A1',
parent: null,
color: '#469649',
created: 1
}, {
id: '_A3',
color: '#00ff00',
parent: {
created: 1,
parent_id: '_A1'
},
created: 1.2
}, {
id: '_A5',
color: '#f62222',
parent: {
created: 1.1,
parent_id: '_A4'
},
created: 1.2
},{
id: '_A6',
color: '#00ff00',
parent: {
created: 1,
parent_id: '_A1'
},
created: 11
},{
id: '_A8',
color: 'yellow',
parent: {
created: 0.5,
parent_id: '_A1'
},
created: 0.6
},{
id: '_A7',
color: '#c2c22b',
parent: null,
created: 0.5
}],
ct = document.getElementById("unordered-data"),
result = document.getElementById("result"),
createRow = function (row) {
var child = document.createElement('div');
child.innerHTML = '<span class="row" style="background-color:' + row['color'] + '">' + row['id'] + ' -- ' + row['created'] + '</span>';
return child
},
compareFn = function (lhs, rhs) {
return (lhs > rhs) ? 1 : (lhs < rhs ? -1 : 0);
},
compareSelfOrParentCreated = function (record1, record2) {
var parent1 = record1.parent,
parent2 = record2.parent;
return compareFn(
parent1 ? parent1.created : record1.created,
parent2 ? parent2.created : record2.created
);
},
compareSelfOrParentId = function (record1, record2) {
var parentId1 = record1.parent,
parentId2 = record2.parent;
return compareFn(!!parentId1 ? parentId1.id : record1.id,
!!parentId2 ? parentId2.id : record2.id);
},
idPropertyOrEmptyString = function (obj) {
return (!!obj && !!obj.id) ? obj.id : '';
};
for (row in data) {
ct.appendChild(createRow(data[row]));
}
for(r in data){
data[r]._id = idPropertyOrEmptyString(data[r].parent);
}
data.sort(function(r1, r2){
var cmpCreated = compareSelfOrParentCreated(r1, r2);
if(cmpCreated === 0){
var cmpParent = compareSelfOrParentId(r1, r2);
if(cmpParent === 0){
var parentAsc = compareFn(r1._id, r2._id);
if(parentAsc === 0){
return compareFn(r1.created, r2.created);
} else{
return parentAsc;
}
} else {
return cmpParent
}
} else{
return cmpCreated;
}
});
for (row in data) {
result.appendChild(createRow(data[row]));
}
.row {
display:block;
width:200px;
padding:10px;
}
<h2>
Unordered data
</h2>
<div id="unordered-data">
</div>
<h2>
Result
</h2>
<div id="result">
</div>
これは意味がありません。あなたは創造日で注文したいと言っていますが、_A3を_A4の前にしたいですか? – Oriol
@Oriolなぜそれが感動しない、多分私の質問を投票する前に、並べ替えについての詳細を学ぶ必要があります! – v1r00z
私の解決策を確認してくださいhttps://jsfiddle.net/crazyvirus/np2pjctg/ – v1r00z