#javascript #arrays
#javascript #массивы
Вопрос:
Я пытаюсь выполнить .toLocaleString()
для каждого из элементов массива. Я выполняю это, например, для изменения 1111' to
1,111`. Данные, к которым я пытаюсь получить доступ:
"Data": {
"id": 1182,
"time": 1637193600,
"symbol": "BTC",
"partner_symbol": "BTC",
"zero_balance_addresses_all_time": 882855842,
"unique_addresses_all_time": 920909797,
"new_addresses": 476543,
"active_addresses": 992178,
"average_transaction_value": 18.723511893530098,
"block_height": 710345,
"hashrate": 163489266.17996278,
"difficulty": 22674148233453.105,
"block_time": 595.6643356643356,
"block_size": 1267871,
"current_supply": 18877162,
"transaction_count": 293867,
"transaction_count_all_time": 688002252,
"large_transaction_count": 29400
}
Мой код пытается манипулировать массивом:
getCryptoBlockchainData(selectedCrypto).then(cryptoTradingSignal => {
if (cryptoTradingSignal.hasOwnProperty('id')) {
cryptoTradingSignal.forEach(function (item, i) {
this[i] = item.toLocaleString();
}, cryptoTradingSignal);
return this.setState({cryptoBlockchainData: cryptoTradingSignal});
} else {
return this.setState({cryptoBlockchainData: undefined});
}
});
}
Комментарии:
1. Array.prototype.map() вернет новый массив с измененными значениями. Вы пробовали это?
Ответ №1:
Вы не можете использовать свойства объекта. Вы можете преобразовать его в массив, сделать свое дело, а затем преобразовать его обратно в объект.
getCryptoBlockchainData(selectedCrypto).then(cryptoTradingSignal => {
if (cryptoTradingSignal.hasOwnProperty('id')) {
const newSignal = Object.fromEntries(
Object.entries(cryptoTradingSignal).map(([k, v]) => ([k, v.toLocaleString()]))
);
return this.setState({cryptoBlockchainData: newSignal});
} else {
return this.setState({cryptoBlockchainData: undefined});
}
});
Ответ №2:
вероятно, вы могли бы использовать Array.prototype.map()
для этого.
Для вашего кода может быть что-то вроде
const newArray = Object.keys(object["Data"]).map(item => object[item].toLocaleString()));
Смотрите Документы здесь.
Комментарии:
1. кажется, что он никогда не проходит через сопоставление — я устанавливаю точки останова, и он просто перескакивает через него
2. Не могли бы вы предоставить дополнительную информацию и контекст на вашем языке? Возможно, я что-то упускаю из виду.
Ответ №3:
Вы можете перебирать ключи объекта с помощью функции Object.keys() и изменять нужные значения.
const dataObj = {
"id": 1182,
"time": 1637193600,
"symbol": "BTC",
"partner_symbol": "BTC",
"zero_balance_addresses_all_time": 882855842,
"unique_addresses_all_time": 920909797,
"new_addresses": 476543,
"active_addresses": 992178,
"average_transaction_value": 18.723511893530098,
"block_height": 710345,
"hashrate": 163489266.17996278,
"difficulty": 22674148233453.105,
"block_time": 595.6643356643356,
"block_size": 1267871,
"current_supply": 18877162,
"transaction_count": 293867,
"transaction_count_all_time": 688002252,
"large_transaction_count": 29400
}
Object.keys(dataObj).forEach(key => dataObj[key] = dataObj[key].toLocaleString());
console.log(dataObj);
Редактировать:
Если ваш объект вложен, как в вашем примере, вам также необходимо использовать ключ ‘Data’:
Object.keys(dataObj['Data']).forEach(key => dataObj['Data'][key] = dataObj['Data'][key].toLocaleString());