Я думаю, что вы допустили некоторые ошибки в своем исходном коде, но я полагаю, что это из-за путаницы при работе с таким количеством слоев объектов и массивов.Вот что вы должны сделать:
const getValue = (source, typein, typeout, obj) => {
const res = obj.map(item => {
if (item['country_from'][0]['paymentIn'][0]['type'] === typein
&& item['country_from'][0]['currency'].includes(source)
&& item['country_from'][0]['paymentOut'][0]['type'] === typeout) {
return `id: ${item['id']} credit: ${item['country_from'][0]['paymentIn'][0]['speed']['number']} days credit: ${item['country_from'][0]['paymentIn'][0]['fee']['number']}${item['country_from'][0]['paymentIn'][0]['fee']['type']} pay_in: pay_out: ${item['country_from'][0]['paymentOut'][0]['speed']['number']}`
}
});
return res;
}
getValue('SGD', 'credit', 'bank', obj);
По сути, я буду перебирать каждый элемент входного массива, obj
(тот, который вы опубликовали в своем вопросе), и в каждой итерации япроверьте следующие 3 условия, используя оператор if.
1) paymentIn
type
соответствует typein
2) paymentOut
type
соответствует typein
3) currency
содержит source
Элементы, которые удовлетворяют вышеуказанным 3 условиям, будут иметь строковый результат.
РЕДАКТИРОВАТЬ: Чтобы ответить на ваш вопрос в комментариях, если массив paymentIn
имеет более одного объекта, мы можем использовать Array.some (), чтобы проверить, имеет ли объект со свойством type
то же значение, что и typeIn
.
if (item['country_from'][0]['paymentIn'].some(payment => payment['type']===typein)
&& item['country_from'][0]['currency'].includes(source)
&& item['country_from'][0]['paymentOut'][0]['type'] === typeout) {
// to get the object with that typein
const filteredPaymentIn = item['country_from'][0]['paymentIn'].filter(payment => payment['type']===typein)[0];
}