Часто желательно получить все комбинации свойств объекта. Одним из случаев, когда я использую это больше всего, является тестирование: я хочу попробовать функцию компонента с каждой перестановкой данных, которые он может получить.
Допустим, у нас есть отреагирование NAVBAR, которая принимает следующие реквизиты: Имя , DisplayMode и часовой пояс Отказ Имя может быть либо строкой, либо null (Если нет возобновляемого пользователя), DisplayMode может быть «Темные» или «Свет» и часовой пояс может быть "Et" , "КТ" , "МТ" или "PT" Отказ
Мы хотели бы сделать моментальное тестирование нашей Наварной в каждом возможном состоянии. Мы мог бы Вручную выписывайте каждое состояние, но в конечном итоге составляет 2 * 2 * комбинации. Если бы у нас было еще больше реквизитов, это выйдет из рук быстро! Вместо этого напишите быстрый скрипт, который производит все возможные комбинации:
const navBarProps = {
name: ["John Doe", null],
displayMode: ["dark", "light"],
timezone: ["ET", "CT", "MT", "PT"],
};
function allCombinations(obj) {
let combos = [{}];
Object.entries(obj).forEach(([key, values]) => {
let all = [];
values.forEach((value) => {
combos.forEach((combo) => {
all.push({ ...combo, [key]: value });
});
});
combos = all;
});
return combos;
}
console.log(allCombinations(navBarProps));
/*
[ { name: 'John Doe', displayMode: 'dark', timezone: 'ET' },
{ name: null, displayMode: 'dark', timezone: 'ET' },
{ name: 'John Doe', displayMode: 'light', timezone: 'ET' },
{ name: null, displayMode: 'light', timezone: 'ET' },
{ name: 'John Doe', displayMode: 'dark', timezone: 'CT' },
{ name: null, displayMode: 'dark', timezone: 'CT' },
{ name: 'John Doe', displayMode: 'light', timezone: 'CT' },
{ name: null, displayMode: 'light', timezone: 'CT' },
{ name: 'John Doe', displayMode: 'dark', timezone: 'MT' },
{ name: null, displayMode: 'dark', timezone: 'MT' },
{ name: 'John Doe', displayMode: 'light', timezone: 'MT' },
{ name: null, displayMode: 'light', timezone: 'MT' },
{ name: 'John Doe', displayMode: 'dark', timezone: 'PT' },
{ name: null, displayMode: 'dark', timezone: 'PT' },
{ name: 'John Doe', displayMode: 'light', timezone: 'PT' },
{ name: null, displayMode: 'light', timezone: 'PT' }
*/
Вот и все! Теперь, если мы хотели создать некоторые компоненты, основанные на этих комбинациях, мы можем просто петлю по сравнению с созданным массивом.
const tests = allCombinations(navBarProps).map(props => {
return ;
});
Оригинал: “https://dev.to/nas5w/a-12-line-javascript-function-to-get-all-combinations-of-an-object-s-properties-43i8”