Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript按数字、字符串和其他受影响的数组对数组进行排序_Javascript - Fatal编程技术网

Javascript按数字、字符串和其他受影响的数组对数组进行排序

Javascript按数字、字符串和其他受影响的数组对数组进行排序,javascript,Javascript,我有一个包含两个数组的对象变量 var count = 200; var display = { text: [5, 10, 25, 50, "All", 18], value: [5, 10, 25, 50, count, 18] }; 注意:文本数组中键入的字符串将始终引用值数组中的计数变量 我想先按数字然后按字符串对文本数组进行排序,但值数组也会根据显示变量中的文本数组受到影响,因此排序后,它将输出如下内容: display.text: [5, 10, 18, 25, 50

我有一个包含两个数组的对象变量

var count = 200;

var display = {
   text: [5, 10, 25, 50, "All", 18],
   value: [5, 10, 25, 50, count, 18]
};
注意:文本数组中键入的字符串将始终引用值数组中的计数变量

我想先按数字然后按字符串对文本数组进行排序,但值数组也会根据显示变量中的文本数组受到影响,因此排序后,它将输出如下内容:

display.text: [5, 10, 18, 25, 50, "All"];
display.value: [5, 10, 18, 25, 50, 200];
如果我使计数值变小,例如

count = 1; // change count to 1
它将显示类似这样的内容

display.text: [5, 10, 18, 25, 50, "All"];
display.value: [5, 10, 18, 25, 50, 1];
怎么做

像这样的

var count = 200;
var display = {
   text: [5, 10, 25, 50, "All", 18],
   value: [5, 10, 25, 50, count, 18]
};

var array = [];
for(var i=0; i<display.text.length; i++) {
    array.push( { text: display.text[i], value: display.value[i] } );   
}

array = array.sort(function(a, b) {
    var aa = a.text, bb = b.text;
    if(typeof a.text == 'string' || a.text instanceof String) aa = +Infinity;
    if(typeof b.text == 'string' || b.text instanceof String) bb = +Infinity;
    return aa - bb;
});
var计数=200;
变量显示={
案文:[5、10、25、50,“全部”,18],
值:[5,10,25,50,计数,18]
};
var数组=[];

对于(var i=0;i您可以使用
map
对相应的数组项进行配对,然后对它们进行
sort
排序。排序需要检查字符串类型以将其放在末尾,其余部分将通过常规数字比较处理

var result = display.text.map(function(x, i) {
    return { text: x, value: display.value[i] };
  }).sort(function(x, y) {
    return typeof x.text === "string" ? 1 : x.text - y.text;
  });

检查相同的代码。

不要尝试将两个数组排序在一起(这是一个难题),而是创建一个由同时包含
text
value
的对象组成的数组:
var display=[{text:5,value:5},…]
。现在您只有一个数组要排序。您想要对值数组进行排序,除了值200或1在某个点来自名为
count
的变量之外,似乎没有其他明显的逻辑,但一旦变量显示被其值填充,就无法知道会发生什么。@MattBurland哦,是的!永远不会想到这一点,下面所有的答案都表明了这一点。谢谢:)耶。非常感谢。你真棒。但我有个问题,“+Infinity”代表什么?很高兴它起了作用<代码>无穷大
是全局范围内的变量。
无穷大
的初始值为
数字。正无穷大
,其值大于任何其他数字,包括其本身。我用它使
字符串
元素大于排序数组中的任何数字。耶,谢谢。这也行!答案非常简单。“数组映射”是否适用于所有浏览器?@klassen
map
应适用于所有浏览器,而IE9+则适用于所有浏览器。如果您需要支持早期版本的IE,并且项目中有jQuery或Lo-Dash(或下划线),则可以分别使用或。
var result = display.text.map(function(x, i) {
    return { text: x, value: display.value[i] };
  }).sort(function(x, y) {
    return typeof x.text === "string" ? 1 : x.text - y.text;
  });