Для простоты:
// Usage
const intersection = allLists
.reduce(intersect, allValues)
.reduce(removeDuplicates, []);
// Implementation
const intersect = (intersection, list) =>
intersection.filter(item =>
list.some(x => x === item));
const removeDuplicates = (uniques, item) =>
uniques.includes(item) ? uniques : uniques.concat(item);
// Example Data
const somePeople = [bob, doug, jill];
const otherPeople = [sarah, bob, jill];
const morePeople = [jack, jill];
const allPeople = [...somePeople, ...otherPeople, ...morePeople];
const allGroups = [somePeople, otherPeople, morePeople];
// Example Usage
const intersection = allGroups
.reduce(intersect, allPeople)
.reduce(removeDuplicates, []);
intersection; // [jill]
Преимущества:
Недостатки:
Вы не хотели бы использовать это для 3D-движок или ядро работают, но если у вас есть проблемы с его запуском в приложении, основанном на событиях, у вашего дизайна большие проблемы.
Предложение: пропустите свой код через профилировщик. Тогда вы узнаете, где он медленный. Интуитивно понятно, что OrderBy - самая медленная вещь в этой программе. Но интуиция относительно самой медленной вещи часто очень и очень ошибочна. Используйте профилировщик.
Конечно, вы также должны устранить серьезные недостатки в этой программе. Помните, что Count () подсчитывает последовательность путем ее повторного перечисления. Count () не знает, что вы не меняли последовательность с момента ее последнего подсчета! Вероятно, вы захотите сохранить счетчик, а не пересчитывать его каждый раз, или использовать длину, поскольку у вас есть массив.
На странице руководства указано, что «Если игнорируемый файл явно указан в командной строке, команда завершится ошибкой со списком игнорируемых файлов».
Если файл игнорируется, вы можете заставить его добавляется с помощью ' git add --force full / path / to / file
».
Как отмечалось в предыдущем ответе, shells / smallApps
- это подмодуль в вашем репозитории.
Если файл является частью подмодуля, ситуация более сложная. Вы не можете изменять содержимое подмодуля из основного проекта.
Если вы хотите удалить ссылку на подмодуль и напрямую отслеживать файлы в основном репозитории, необходимо выполнить несколько шагов. Вы не можете просто удалить каталог ".git" из подмодуля. Между вашим основным репозиторием и подмодулем есть три ссылки:
.gitmodules
в вашем основном репозитории. .git / config
вашего основного репо. В соответствии с этим вопросом SO , вам необходимо выполнить следующие шаги, чтобы полностью удалить подмодуль:
ПРИМЕЧАНИЕ. Если от этого подмодуля зависит другая ветка, то ее удаление может повредить ваш репозиторий! Это опасная операция ... используйте с осторожностью.
.gitmodules
. .git / config
. git rm --cached path_to_submodule
(без косой черты в конце). Каталог git (находится в корне вашего репо) .git
в editors / vim / vimdoclet
.git
в shells / smallApps
Я вижу, у вас есть git add
, говорящий о подмодулях. У вас есть вложенные репозитории Git? Сделайте следующее:
$ find . -name .git
Сколько каталогов .git
перечислено? Если их несколько, значит, у вас несколько вложенных репозиториев, и это может быть причиной некоторой путаницы.
Вам следует подумать о том, чтобы отправить этот вопрос в список рассылки Git ( git@vger.kernel.org
). Скорее всего, вы получите более быстрый и полный ответ.
Если вы все же решите разместить там сообщение, обязательно включите:
ls -al
cat .git / config
find. -name ".git *"
git status
git add editors
git add shells
git status