我使用underscore
s sortBy()
对array
个字符串进行排序。但是我想比其他人更早地对几个(硬编码的)字符串进行排序 - 我将向用户显示输出,并且将相关字符串放在前面更为自然。
例如:我希望name
和type
分别出现在第一和第二位,然后按字母顺序排列其他所有内容。
假设:
["above", "name", "below", "foo", "type", "bar"]
我想:
["name", "type", "above", "bar", "below", "foo"]
我知道我可以向iteratee
sortBy()
提供const relevantSort = function(key) {
if (key === 'name') { return [0, key]; }
if (key === 'type') { return [1, key]; }
return [2, key];
}
,但对我来说有点不清楚如何干净利落地持续获得理想的行为。
我试过了:
[10, key]
(我知道有办法收紧,但这与我的问题正交)。
这导致一个稳定排序的,正确排序的数组...但如果我有一堆硬代码并最终在某处返回name
,这会崩溃,因为Javascript数组排序将数字强制转换成字符串。
是否有更清晰,更清洁,更不易碎的方式来达到我想要的行为?
编辑:
此外,可能还没有从上面清楚 - 我事先不知道阵列的内容,我不知道type
或index
是否永远在那里(也不是在 public void actionPerformed(ActionEvent arg0) {
if(!textField.getText().equals(""))
{
SwingUtilities.invokeLater(new Runnable() {
public void run() {
btnSubmit.setText("Working...");
}
});
//btnSubmit.setText("Working...");
ft.FindSpot(textField.getText(), comboBox.getSelectedItem().toString(), progressBar);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
btnSubmit.setText("Submit");
}
});
}
else
{
ft.warningMessage("The ISCII textbox cannot be blank.");
}
}
});
,如果它们确实存在的话。)
答案 0 :(得分:1)
怎么样:
<强>已更新强>
var array = ["above", "name", "below", "foo", "type", "bar"];
if(array.indexOf('type') > -1) {
array.splice(1, 0, array.splice(array.indexOf('type'), 1)[0]);
}
if(array.indexOf('name') > -1) {
array.splice(0, 0, array.splice(array.indexOf('name'), 1)[0]);
}
答案 1 :(得分:0)
我不确定如何&#34;强调&#34;完全正常,但这个纯JavaScript代码可能会帮助你。 这也是一种硬编码,但它可能适合你。
var arr = ["above", "name", "below", "foo", "type", "bar"];
['name', 'type'].concat(arr.filter(function(item) {
return item !== "name" && item !== "type";
}).sort(function(a, b) {
return a > b;
}));
如果您正在寻找["name", "type", 10, 11, 140, "above", "bar", "below", "foo"]
之类的东西,请从排序中删除回调函数,因为它会先给出结果,然后是数字。
答案 2 :(得分:0)
<强>已更新强>
var array = ["above", "name", "below", "foo", "type", "bar"];
var hardcoded_array = ["name", "type"];
var difference = _.difference(array, hardcoded_array);
var value_exist_array = _.intersection(array, hardcoded_array);
var sorted_array = _.sortBy(difference, function(value) {
return value;
});
console.log(value_exist_array.concat(sorted_array)); // ["name", "type", "above", "bar", "below", "foo"]
答案 3 :(得分:0)
您可以使用自定义排序功能,其中订单对象指定单词,并使用指定顺序的值。低值的单词将出现在排序数组中具有高值的单词之前。
const order = {'name' : 1, 'type' : 2};
function sortArray(order, arr) {
return arr.sort(function(a,b) {
if(order[a] && order[b])
return order[a] - order[b];
else if(order[a] || order[b])
return order[a] || order[b];
else
return a.localeCompare(b);
});
}
console.log(sortArray(order, ["above", "name", "below", "foo", "type", "bar"]));
console.log(sortArray(order, ["above", "below", "foo", "type", "bar"]));
console.log(sortArray(order, ["above", "below", "foo", "bar"]));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;