В тех же строках, что и JSON.encode, следует использовать join ().
function checkArrays( arrA, arrB ){
//check if lengths are different
if(arrA.length !== arrB.length) return false;
//slice so we do not effect the original
//sort makes sure they are in order
//join makes it a string so we can do a string compare
var cA = arrA.slice().sort().join(",");
var cB = arrB.slice().sort().join(",");
return cA===cB;
}
var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"]; //will return true
console.log( checkArrays(a,b) ); //true
console.log( checkArrays(a,c) ); //false
console.log( checkArrays(a,d) ); //false
console.log( checkArrays(a,e) ); //true
Проблема только в том, что вам нравятся типы, которые были проведены последними сравнительными тестами. Если вам нравятся типы, вам придется зацикливаться.
function checkArrays( arrA, arrB ){
//check if lengths are different
if(arrA.length !== arrB.length) return false;
//slice so we do not effect the orginal
//sort makes sure they are in order
var cA = arrA.slice().sort();
var cB = arrB.slice().sort();
for(var i=0;i<cA.length;i++){
if(cA[i]!==cB[i]) return false;
}
return true;
}
var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];
console.log( checkArrays(a,b) ); //true
console.log( checkArrays(a,c) ); //false
console.log( checkArrays(a,d) ); //false
console.log( checkArrays(a,e) ); //false
Если порядок должен оставаться таким же, как это просто цикл, никакой сортировки не требуется.
function checkArrays( arrA, arrB ){
//check if lengths are different
if(arrA.length !== arrB.length) return false;
for(var i=0;i<arrA.length;i++){
if(arrA[i]!==arrB[i]) return false;
}
return true;
}
var a = [1,2,3,4,5];
var b = [5,4,3,2,1];
var c = [1,2,3,4];
var d = [1,2,3,4,6];
var e = ["1","2","3","4","5"];
console.log( checkArrays(a,a) ); //true
console.log( checkArrays(a,b) ); //false
console.log( checkArrays(a,c) ); //false
console.log( checkArrays(a,d) ); //false
console.log( checkArrays(a,e) ); //false
Вы могли бы попробовать delete-indentation
, моя любимая команда для присоединения к нескольким строкам в одну строку. В Вашем примере, помещенном курсор на строку со "вторым" и хитом M-^ дважды. Вот документы:
M-^ выполняет команду
delete-indentation
, которая является интерактивной скомпилированной функцией Lisp вsimple.el
.Это связывается с M-^ .
(delete-indentation &optional arg)
Соединение эта строка к предыдущему и ремонтируют пробел в соединении. Если существует префикс заливки, удалите его с начала этой строки. С аргументом соедините эту строку со следующей строкой.
А именно, там команда, которая удалит весь пробел от точки до первого непробельного символа?
существует команда, которая делает почти что:
м выполнений удалять-горизонтальное-пространство команды, которое является интерактивной скомпилированной функцией Lisp в 'simple.el'.
Это связывается с M-\.
(удалять-горизонтальное-пространство & дополнительный обратно-единственный)
Удаляют все пробелы и вкладки вокруг точки. Если обратно-единственный неноль, только удалите их перед точкой.
Смотрите на эти fixup-whitespace
функция. Это идет с Emacs, в simple.el
. Его документы:
пробел Fixup между объектами вокруг точки. Оставьте одно пространство или ни один, согласно контексту.
А подобная функция, just-one-space
, это
Удаляет все пробелы и вкладки вокруг точки, оставлять одно пространство
обычно связывается с M-SPC .
Я использую следующий макрос для "вытягивания" следующей строки на конец текущей строки, сжимая пробел.
(defun pull-next-line()
(interactive)
(move-end-of-line 1)
(kill-line)
(just-one-space))
Это - точно противоположность @jrockway move-line-up
и delete-indentation
, который я нахожу более естественными. Эти just-one-space
команда в макросе является точно @Mike M-SPACE
.
я связываю pull-next-line
с [1 110] (на аналогии с Vim J
, для "соединения", команды) использование следующего в моем .emacs
.
(global-set-key (kbd "M-J") 'pull-next-line)
Пример. Вызов pull-next-line
на первой строке [1 117]
function_call(
'first_arg',
'second')
урожаи
function_call( 'first_arg',
'second')
Вызов его второй раз уступает
function_call( 'first_arg', 'second')
Можно всегда использовать M-z для удаления до символа.
Для, например, в Вашем случае:
M-z, 'для удаления до одинарной кавычки (к сожалению, это удалит одинарную кавычку также, но это - незначительное неудобство).
Alt-space уменьшит строку пробела к символу одиночного пробела, но это не удалит новую строку. Однако, это должно помочь немногому.
Для удаления всего от точки до первого непробела (или новая строка) введите непробельный символ, Alt-space, клавиша Backspace (для удаления заключительного пробельного символа), затем возвратитесь (для удаления символа, который Вы добавили.
Для превращения многострочного объявления функции в однострочное объявление используйте комбинацию Alt-space, клавиши Backspace и Alt-E (goto-endofline) команды.
Если Вы хотите весь Ваш, удаляет для действия того пути, Вы могли бы проверить жадный - удаляют.
Я делаю это:
(defun move-line-up ()
"Removes leading spaces from the current line, and then moves
the current line to the end of the previous line."
(interactive)
(let (start end)
(save-excursion
(beginning-of-line)
; get first non-space character, only look on this line
(let ((search-end (save-excursion (end-of-line) (point))))
(re-search-forward "[^[:space:]]" search-end))
(setq end (1- (point)))
(previous-line)
(end-of-line)
(setq start (point))
(delete-region start end))
(goto-char start)))
(defun move-next-line-up ()
"Moves the next line to the end of the current line"
(interactive)
(next-line)
(move-line-up))
И связывают их как:
(global-set-key (kbd "C-x ,") 'move-line-up)
(global-set-key (kbd "C-x .") 'move-next-line-up)
Так для решения проблемы, на строке, которая говорит "второй)", просто выполнение C-x , C-x ,
Немного другой подход - создание макроса клавиатуры, который сделает эту работу за вас. Итак, для создания макроэтапа общий сценарий выглядит так:
foo
bar
[a line with "foo" then a couple of lines later and with some white spaces, write "bar"]
then standing anywhere between foo and bar, do the following:
C-x ( ; start recording macro M-b ; move backwards to the beginning of foo END ; move to the end of foo C-space ; place mark C-M-f ; move to the end of bar HOME ; move to the beginning of the line C-w ; yank out all the white space M-SPACE ; leave only one space C-x ) ; end recording the macro M-x name-last-kbd-macro ; name it, call it jline or something
Now you can always remove all whitespace between two words with M-x one-line
Make sure you remember to save your keyboard macro by issuing M-x insert-kbd-macro somewhere in your .emacs file - this is how it looks:
(fset 'jline
[?\M-b end ?\C- ?\C-\M-f home ?\C-w escape ? ])