Как преобразовать «CollectionChain<string>» в «ArrayLike<string | число>' в Лодаше

Я использую lodash.js версии 4.17.15. У меня есть 2D-массив как имя переменной dataArr, Я собираюсь выполнить следующие методы в цепочке, чтобы получить количество каждого содержимого dataArr. const countsObj = _.chain(dataArr).flatten().compact().countBy();

У меня const count = 70,

Затем я выполняю следующий метод, чтобы получить контент, который повторяется по количеству раз. const keyMarker = _.chain(countsObj).invertBy().filter((значение, ключ) => parseInt(key) == count).flatten();

согласно документации https://lodash.com/docs/4.17.15#flatten, keyMarker должен быть типа Array. Если я печатаю console.info(keyMarker), keyMarker четко отображается как массив с правильными элементами. Но _.isArray(keyMarker) ложно, а _.isObject(keyMarker) истинно. keyMarker не имеет свойства размера длины. _.isArray(keyMarker) показывает 5 независимо от количества элементов в массиве. Если я делаю срез, как keyMarker[0], я получаю неопределенность.

При попытке получить пересечение keyMarker с другим массивом отображается следующая ошибка: «Аргумент типа «CollectionChain» не может быть назначен параметру типа «ArrayLike<string | число>'. Свойство «длина» отсутствует в типе «CollectionChain», но необходимо в типе «ArrayLike<string | число>'».

Я новичок в Lodash, может ли кто-нибудь посоветовать мне, как преобразовать CollectionChain, сгенерированный Lodash, в «ArrayLike<string | номер>'?

Спасибо Шайлеш Патель

Можете ли вы добавить оригинальный обр? рабочий фрагмент или, по крайней мере, блок кода было бы здорово.

Ori Drori 07.10.2022 20:11

Спасибо @OriDrori, я создал фрагмент кода здесь ссылка. Вы можете видеть, что dataArr представляет собой двумерный массив. Это тип массива. Я использовал цепную обертку и сделал flattenDeep, согласно документации он должен возвращать массив, но он возвращает объект, а dataArr — это значение ключа «обернутое», без плоского. Мое фактическое приложение находится в Script Lab, размещенном в Microsoft Excel. Текущее поведение отличается от поведения в лаборатории сценариев. Если вы знакомы с Script Lab, я поделюсь сутью.

Shailesh Patel 08.10.2022 15:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Последовательности Lodash оцениваются лениво. Чтобы разрешить цепочку и получить результат от объекта цепочки, вам нужно использовать .value():

const dataArr = [["","","","","","","","","",""],["","INVOICE","","","","","","","",""],["","","","","","","","","",""],["","","","","","","INVOICE # 1","","",""],["","","","","","","","","",""],["","","","","","","","","",""],["","","","","","","DATE","","",""],["","","","","","","","","",""],["","From:","","","","","To:","","",""],["","Your name","","","","","Receivers Name","","",""],["","Address","","","","","Address","","",""],["","Email Address","","","","","Email Address","","",""],["","Phone number","","","","","Phone number","","",""],["","","","","","","","","",""],["","","","","","","","","",""],["","#","Item name","","","Qty","Unit cost","Discount","Total",""],["",1,"Do It Yourself Tornado Kit","","",1,"$489.00 ","","$489.00 ",""],["","Signature","","","","","","","",""],["","","","","","","","","",""],["","","","","","","","","",""],["","Your company name, address and footer","","","","","","","",""]];

const countsObj = _(dataArr)
  .flattenDeep() // flattens multi-dimensional array
  .compact() // removes empty values
  .countBy() // creates an object of [value]: times
  .value(); // executes the chain sequence to resolve the unwrapped value

const count = 2;

const keyMarker = _(countsObj)
  .pickBy(v => v === count) // take properties by condition
  .value(); // executes the chain sequence to resolve the unwrapped value

console.info('countsObj\n', countsObj);
console.info('keyMarker\n', keyMarker);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity = "sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ= = " crossorigin = "anonymous" referrerpolicy = "no-referrer"></script>

Другие вопросы по теме