Я вижу странную проблему в сообществе Lightning с компонентом Aura.

Когда я перебираю эту структуру:

[
  {
    "label": "Contact (OrderApi__Contact__c)",
    "value": "OrderApi__Contact__c"
  },
  {
    "label": "Billing City (OrderApi__Billing_City__c)",
    "value": "OrderApi__Billing_City__c"
  },
  {
    "label": "Billing State (OrderApi__Billing_State__c)",
    "value": "OrderApi__Billing_State__c"
  },
  {
    "label": "Certification (FON_Certification__c)",
    "value": "FON_Certification__c"
  },
  {
    "label": "Activated Date (OrderApi__Activated_Date__c)",
    "value": "OrderApi__Activated_Date__c"
  },
  {
    "label": "Paid Through Date (OrderApi__Paid_Through_Date__c)",
    "value": "OrderApi__Paid_Through_Date__c"
  }
]

Используя for ... in, я получаю эти ключи:

for (var index in columnHeadersArray) {
            console.log(index);
        }
0
1
2
3
4
5
sum

Ключ sum выдает ошибку, потому что когда я пытаюсь получить доступ к индексу массива, выдается ошибка. Есть ли причина, по которой я получу ключ sum?

0
Bryan Anderson 18 Сен 2020 в 15:55
2
Только если где-то в вашем коде есть что-то эквивалентное columnHeadersArray['sum'] = ....
 – 
Keith C
18 Сен 2020 в 16:16
columnHeadersArray["sum"] действительно возвращает какую-то функцию, но я не вижу этого в объекте, который я повторяю
 – 
Bryan Anderson
18 Сен 2020 в 16:19

1 ответ

Лучший ответ

Не используйте for... in для этого используйте метод Array.prototype, например:

columnHeadersArray.forEach((value) => { console.log(value); }) // output elements

Или же

columnHeadersArray.map((value) => value.label); // Makes an array of labels

И т. д. Ознакомьтесь с документацией по MDN. для различных методов, которые вы можете использовать для массива или объекта, подобного массиву.

Если объект на самом деле всего лишь похож на массив, но не на настоящий массив, вы можете вместо этого вызвать метод:

Array.prototype.forEach.call(columnHeadersArray, (value) => { console.log(value); });

См. также эти вопросы и ответы по переполнению стека о том, почему вы не должны использовать for...in для перебора массива или массива- как объект.

2
sfdcfox 18 Сен 2020 в 16:43
Спасибо @sfdcfox, сойдет. Итак, вы понятия не имеете, что будет введена случайная функция sum?
 – 
Bryan Anderson
18 Сен 2020 в 16:49
Вопросы и ответы, которые я связал, намекают на это, но, если быть более точным, for...in перебирает все ключи в объекте, включая все, унаследованные прототипом. В Aura/LWC большинство методов Array переопределяются для обеспечения фильтрации данных службой Locker. Затем эти методы появятся в цепочке прототипов, таким образом, они будут перечислены в for...in. Предположительно, эта функция суммы является вариантом службы Locker для метода Array.prototype.sum.
 – 
sfdcfox
18 Сен 2020 в 16:54
Ого, @sfdcfox, большое спасибо
 – 
Bryan Anderson
18 Сен 2020 в 17:35