Это не рекомендуемый способ решить эту ошибку, но вы можете быстро ее подавить, она выполнит эту работу. Я предпочитаю это для прототипов или демонстраций. добавьте
CheckForIllegalCrossThreadCalls = false
в конструкторе Form1()
.
В указанном вами коде есть потенциальная ошибка.
iterateRules
вы передаете input
вместо item
input
свойство rules
[ 117] Попробуйте это -
function iterateRules(input) {
if(_.has(input, "rules")) {
input.rules.map(function(item) {
if(_.has(item, "rules")){
this.iterateRules(item);
} else if (_.has(item, "data")) {
return item.data = "foo";
}
}, this);
console.log(input);
}
}
Существует рекурсивный подход для достижения этой цели:
const input = {condition: "and", rules: [ { data: "123"}, {condition: "and", rules: [{data:"456"}, {condition: "and", rules: [{value: "456"}]} ] } ]}
function test (obj) {
if(!Object.keys(obj).includes('rules')) return;
obj.rules.forEach(x => x.data ? x.data = 'foo' : x);
return test(obj.rules.find(x => !Object.keys(x).includes('data')));
}
test(input)
console.log(input);
примечание: эта функция изменяет входной объект.