我有以下数据结构,它使用标志动态设置最后一项:
var data = [
{
"id":"One",
"last":false,
},
{
"id":"Two",
"last":true,
},
{
"id":"Three",
"last":false,
},
{
"id":"Four",
"last":false,
},
{
"id":"Five",
"last":false,
}
];
for (var i = 0; i < data.length; i++) {
console.log(data[i].id);
}
如何利用布尔值,以便按此顺序将代码输出到日志中?
One
Three
Four
Five
Two
答案 0 :(得分:3)
您可以按last
属性对数据进行排序。
Array#sort
不是必需的stable。在这种情况下见下文。
var data = [{ id: "One", last: false }, { id: "Two", last: true }, { id: "Three", last: false }, { id: "Four", last: false }, { id: "Five", last: false }];
data.sort(function (a, b) {
return a.last - b.last;
});
console.log(data);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
或者您可以过滤数组并连接false
和true
子数组的两个部分。
function last(flag) {
return function (a) {
return a.last === flag;
};
}
var data = [{ id: "One", last: false }, { id: "Two", last: true }, { id: "Three", last: false }, { id: "Four", last: false }, { id: "Five", last: false }],
temp = data.filter(last(false)).concat(data.filter(last(true)));
console.log(temp);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
Delare一个新数组
var newArr = [];
for (var i = 0; i < data.length; i++) {
if (data[i].last) {
newArr.push(data[i]);
} else {
console.log(data[i].id);
}
}
for (var i = 0; i < newArr.length; i++) {
console.log(newArr[i].id);
}
JS FIDDLE:https://jsfiddle.net/doptjgs2/
答案 2 :(得分:0)
实际上,这只是通过至少两种方法在O(n)中完成的。一个是递归的(falsesFirst
函数如下),另一个是.reduceRight()
(truesLast
函数下面);
var data = [{"id":"One","last":false},{"id":"Two","last":true},{"id":"Three","last":false},{"id":"Four","last":false},{"id":"Five","last":false}],
falsesFirst = d => d.length ? d[0].last ? falsesFirst(d.slice(1)).concat(d[0])
: [d[0]].concat(falsesFirst(d.slice(1)))
: [],
truesLast = d => d.reduceRight((r,o) => o.last ? r.concat(o) : [o].concat(r),[]);
console.log(falsesFirst(data));
console.log(truesLast(data));
&#13;