Я читаю книгу Майкла Фогуса Функциональный JavaScript, и один из примеров в книге не работает. Вот код:Ошибка в функциональном примере Javascript book
function existy(x) {
return x != null;
};
function truthy(x) {
return (x !== false) && existy(x);
};
function cat() {
var head = _.first(arguments);
if (existy(head))
return head.concat.apply(head, _.rest(arguments));
else
return [];
};
function construct(head, tail) {
return cat([head], _.toArray(tail));
};
function rename(obj, newNames) {
return _.reduce(newNames, function(o, nu, old) {
console.log("o: " + o);
console.log("nu: " + nu);
console.log("old: " + old);
if (_.has(obj, old)) {
o[nu] = obj[old];
return o;
}
else
return o;
},
_.omit.apply(null, construct(old, _.keys(newNames))));
};
rename({a: 1, b: 2}, {'a': 'AAA'});
// => {AAA: 1, b: 2}
Все функции работают исправно, кроме rename(). По сути, цель - взять объект и вернуть объект с именами свойств, обновленными с помощью объекта newName. Я не совсем понимаю это полностью, но метод сокращения не похож на правильные аргументы. Вот ошибка я получаю, когда я звоню переименовать():
ReferenceError: old is not defined
Любая помощь, чтобы понять, почему это не работает, было бы весьма признателен!
+1 «Я не доверяю книге, ставит точки с запятой после определения функций ... » –
Спасибо! Любое предложение относительно того, как я должен это исправить? – EmptyArsenal
@ EmptyArsenal: Я все еще не совсем уверен, что он делает. Требуется ли '{a: 52}' и '{a:" b "}' и создавать '{b: 52}'? – Ryan