2015-07-09 3 views
0

Update: Я, кажется, установил ее, просто добавивСортировка нескольких массивов одновременно

document.getElementById('fullName').focus(); 
    NameSalaries.sort(); 
    } 

в главной функции. Я не могу поверить, что это действительно сработало. Но я предполагаю, что это потому, что я «застегнул» основные массивы. Спасибо всем за вашу помощь!

Хорошо, я пытаюсь использовать новый метод. Таким образом, сотрудники динамически добавляются с новой ячейкой таблицы каждый раз. Однако проблема, с которой я столкнулась, остается. Мне нужны результаты, чтобы сортировать себя по мере их представления. И имя, и зарплаты.

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="UTF-8" /> 
<title> Table Entry </title> 
</head> 
<body> 
<input type="text" id="fullName" value="" placeholder="Firstname"> :Enter employee name <br> 
<input type="text" id="salary" value="" placeholder="Salary"> :Enter employee salary <br> 
<input type="button" value="click me add to array" onclick="addToArray()"> <p>&nbsp;</p> 

<table border="1" id="source" cellspacing="3" cellpadding="3"> 
<thead> 
    <tr> <th>Employee Name</th> <th>Employee Salary</th> </tr> 
</thead> 
<tbody id="sourceBody"> 
    <tr><td>&nbsp;</td><td>&nbsp;</td></tr> 
</tbody> 
</table> 

<script type="text/javascript"> 

var NameSalaries= []; 
function addToArray() { 
    var fn = document.getElementById('fullName').value; 
    var sly = document.getElementById('salary').value; 
    var both = [fn,sly]; 
    NameSalaries.push(both); 
    createBody(NameSalaries); 
    document.getElementById('fullName').focus(); 
    } 
function createBody(NS) { 
    var tarr = []; 
    for (var i=0; i<NS.length; i++) { 
    tarr.push('<tr><td>'+NS[i][0]+'</td><td>'+NS[i][1]+'</td></tr>'); 
    } document.getElementById('sourceBody').innerHTML = tarr.join(''); 
} 

</script> 
</body> 
</html> 
+0

Вам понадобится ** zip ** их, а затем отсортировать. – Bergi

+0

@Bergi: Я собирался сказать, что он должен объединять элементы массива, а затем сортировать ... Я никогда не слышал о ** zip **, о котором вы говорите. Мы говорим об одном и том же? –

+0

Это определенно то, что я пытаюсь сделать. Я пробовал это с concat, но это не сработало. Любая помощь? Извините, очень новый для js –

ответ

1

Вы можете присоединиться к зарплате и имени, используя один объект. Например:

var joe = { 
    name: "joe schmoe", 
    salary: 1234 
}; 

Используя эту технику, вы можете «сжать» свои два массива в один:

var employees = []; 
for(var i = 0; i < names.length && i < salaries.length; i++) { 
    employees.push({ // push appends to the end of the array 
     name: names[i], 
     salary: salaries[i] 
    }); 
} 

И вы можете передать функцию array.sort, которая будет использоваться для сравнения значений. Так что если вы хотите, чтобы отсортировать employees массив на основе имен сотрудников, вы можете сравнить строки с помощью < и > для в алфавитном порядке:

var alphabatizedEmployees = employees.sort(function(employee1, employee2) { 
    return employee1.name > employee2.name; 
}); 

И вы можете отсортировать на основе заработной платы точно так же, за исключением того, с помощью клавиши salary вместо ключа name:

var employeesSalarySorted = employees.sort(function(employee1, employee2) { 
    return employee1.salary > employee2.salary; 
}); 

sort возвращает новый массив, так что оригинальный employees массив не будет отсортирован.

Надеюсь, это поможет.

+0

Могу ли я использовать это в сочетании с именами и зарплатами, определяемыми пользователем, а не мной? Поскольку имена и зарплаты добавляются динамически после загрузки страницы –

+0

Да, вы могли бы. Вместо того, чтобы нажимать отдельные значения для разделения массивов, когда пользователь добавляет новую запись, вы можете нажать один объект на массив объектов. Похоже, что вы делаете что-то подобное в коде в своем сообщении, за исключением того, что используете 2d-массив, поэтому, если вы хотите изменить его для использования объектов, вы должны изменить 'var both = [fn, sly]' to ' вар как = {имя: Fn, зарплата: хитрая} 'и'» '+ NS [I] [0] +' '+ NS [я] [1] +' '' в '' '+ NS [i] .name +' '+ NS [i] .salary +' '' – SimpleJ

Смежные вопросы