我有一个Javascript列表
var list = [
{ date: "2005-04-01", position: 12, worker: "John", prop: "k11" },
{ date: "2006-02-01", position: 72, worker: "John", prop: "k12" },
{ date: "2005-09-06", position: 42, worker: "Aleks", prop: "k43" },
{ date: "2004-07-02", position: 12, worker: "Mark", prop: "k12" },
];我想要创建一个像list.sort(' position ','12')这样的排序函数,它将按值'12‘为位置字段排序列表,并给出输出。
日期:"2005-04-01",职位: 12,工人:“约翰”,道具:"k11“
日期:"2004-07-02",职位: 12,工人:“标记”,道具:"k12“
日期:"2006-02-01",职位: 72,工人:“约翰”,道具:"k12“
日期:"2005-09-06",职位: 42,工人:"Aleks",道具:"k43“
但是你也可以把它叫做list.sort(' worker ','John'),它也会按日期对它进行排序。
发布于 2015-12-26 18:27:55
这是对给定的键/值对进行特权排序的建议。
功能:
var list = [
{ date: "2005-04-01", position: 12, worker: "John", prop: "k11" },
{ date: "2006-02-01", position: 72, worker: "John", prop: "k12" },
{ date: "2005-09-06", position: 42, worker: "Aleks", prop: "k43" },
{ date: "2004-07-02", position: 12, worker: "Mark", prop: "k12" },
];
function setCondition(condition) {
var key = Object.keys(condition)[0],
value = condition[key];
return function (a, b) {
function x(o) { return -(o[key] === value); }
return x(a) - x(b) || b.date.localeCompare(a.date);
}
}
document.write('<pre>' + JSON.stringify(list.sort(setCondition({ position: 12 })), 0, 4) + '</pre>');
document.write('<pre>' + JSON.stringify(list.sort(setCondition({ worker: 'John' })), 0, 4) + '</pre>');
发布于 2015-12-26 17:00:41
如果一个新的引用是好的,找到所有匹配,找到所有非匹配,连接这两个数组。
function bringToTop(arrOfObj, prop, val) {
return arrOfObj.filter(e => e[prop] === val).concat(
arrOfObj.filter(e => e[prop] !== val)
);
}例如:
var arr = [
{foo: 0, bar: 0, baz: 'fizz'},
{foo: 0, bar: 1, baz: 'buzz'},
{foo: 1, bar: 0, baz: 'fizz'},
{foo: 1, bar: 1, baz: 'buzz'}
];
bringToTop(arr, 'baz', 'buzz');
/*
[
{foo: 0, bar: 1, baz: 'buzz'},
{foo: 1, bar: 1, baz: 'buzz'},
{foo: 0, bar: 0, baz: 'fizz'},
{foo: 1, bar: 0, baz: 'fizz'}
]
*/如果您想要相同的结果,请接受这个结果,清空原来的结果,然后按下结果。
var res = bringToTop(arr, 'baz', 'buzz');
arr.length = 0;
Array.prototype.push.apply(arr, res);https://stackoverflow.com/questions/34472848
复制相似问题