Вопрос аналогичен: How can I check that two objects have the same set of property names?, но только одна разницаJavaScript: Глубокие объекты проверки имеют одинаковые ключи
Я хочу, чтобы проверить:
var objOne = {"a":"one","b":"two","c":{"f":"three_one"}};
var objTwo = {"a":"four","b":"five","c":{"f":"six_one"}};
имеют один и тот же набор ключей на всех уровнях?
Например deepCheckObjKeys(objOne, objTwo)
вернется true
где deepCheckObjKeys(objOne, objThree)
возвращение false
, если:
var objThree = {"a":"four","b":"five","c":{"g":"six_one"}};
С objThree.a.c.f
в objThreeundefined
.
функция, как это:
'использовать строгий';
function objectsHaveSameKeys() {
for (var _len = arguments.length, objects = Array(_len), _key = 0; _key < _len; _key++) {
objects[_key] = arguments[_key];
}
var allKeys = objects.reduce(function (keys, object) {
return keys.concat(Object.keys(object));
}, []);
var union = new Set(allKeys);
return objects.every(function (object) {
return union.size === Object.keys(object).length;
});
}
проверяет только первый уровень.
PS: objectsHaveSameKeys() ES6 эквивалент:
function objectsHaveSameKeys(...objects):boolean {
const allKeys = objects.reduce((keys, object) => keys.concat(Object.keys(object)), []);
const union = new Set(allKeys);
return objects.every(object => union.size === Object.keys(object).length);
}
Ницца. Могу ли я спросить, почему вы объявляете внутренние переменные как const, а не как var? –
@ThirueswaranRajagopalan: В ES2015 и выше я по умолчанию 'const'. Я использую 'let', если мне нужно изменить значение переменной в какой-то момент, и мне не нужно было изменять их. Я вообще не использую 'var'. (Er, кроме того, я вижу, что делал это при копировании вашего objOne и такого выше. :-)) –
Haaa, кажется, ваши личные предпочтения: D Cool ... –