任何人都知道为什么这可能会导致调用堆栈?我什至没有递归。
错误:
C:\Documents and Settings\j\Desktop\bmrepl\STEAL\dedup.js:7
this.push.apply(this, rest);
^
RangeError: Maximum call stack size exceeded
at Array.pluck (C:\Documents and Settings\j\Desktop\bmrepl\STEAL\dedup.js:7:13)
at eatDupe (C:\Documents and Settings\j\Desktop\bmrepl\STEAL\dedup.js:46:15)
at common (C:\Documents and Settings\j\Desktop\bmrepl\STEAL\dedup.js:39:20)
at Object.<anonymous> (C:\Documents and Settings\j\Desktop\bmrepl\STEAL\dedup.js:51:3)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Function.Module.runMain (module.js:497:10)
at startup (node.js:119:16)
并且,dedup.js
:
var input = require('prompt'), sugar = require('sugar');
Array.prototype.pluck = function(i) {
var el = this[i];
var rest = this.slice(i + 1 || this.length);
this.length = i < 0 ? this.length + i : i;
this.push.apply(this, rest);
return el;
};
var s = require('fs').readFileSync('NLD_EXSORT.json', {encoding: 'utf8'});
var arr = JSON.parse(s);
if ( arr.filter(function(el){ return el.filter(function(el){ return typeof el != 'string'; }).length != 0; }).length !== 0 ) throw 'nested arrays?'
console.log('all good');
// input.start();
var unq = [];
(function(){
var dupeDate;
for(var i = 0; i < arr.length; i++) {
unq.push(arr[i]);
while(dupeDate = eatDupe())
arr[i].push(dupeDate)
}
function eatDupe(){
if (!arr[i+1]) return false;
if (cmp(arr[i], arr[i+1]) > 2)
return arr.pluck(i+1).pop();
else
return false;
}
})();
console.log(unq.length);
function cmp(a, b){
var common = 0;
while(common < a.length || common < b.length){
if(a[common] == b[common])
common++;
else
return common;
}
if ( a.length == b.length ) return a.length;
else throw 'CMP_ERR';
}
SO抱怨它的代码太多,但我可以把它修剪得更多,我早就这样做了。所以 Lorem ipsum dolor 也许这不是必需的,idk。