У меня есть эти данные.
{"channel":
{
"id":*******,"name":"INA229 Measurement",
"description":"Test with INA229",
"latitude":"0.0",
"longitude":"0.0",
"field1":"Voltage",
"field2":"Current",
"field3":"Power",
"field4":"Temperature",
"created_at":"2022-04-07T08:40:24Z",
"updated_at":"2022-04-07T08:40:52Z",
"last_entry_id":3771},
"feeds":[]
}
Как взять только значения для ключей поля (x) в новые данные. Ключ имени field(x) (field1, field2, field3 ..... field8) является динамическим и изменяется в диапазоне от ключей поле1 до поле8. Я не знаю, сколько их будет всего, даже при получении данных.
Object#entries
, получите пары ключ-значение channel
Array#reduce
, выполните итерацию по последнему при обновлении результирующего объекта.String#match
для проверки формата ключа.const data = { "channel": { "id": "", "name": "INA229 Measurement", "description": "Test with INA229", "latitude": "0.0", "longitude": "0.0", "field1": "Voltage", "field2": "Current", "field3": "Power", "field4": "Temperature", "created_at": "2022-04-07T08:40:24Z", "updated_at": "2022-04-07T08:40:52Z", "last_entry_id": 3771 }, "feeds": [] };
const res = Object.entries(data.channel).reduce((acc, [key, value]) => {
if(key.match(/^field[1-8]$/)) {
acc[key] = value;
}
return acc;
}, {});
console.log(res);
Пожалуйста, убедитесь, как вы хотите проверить ключ: должен ли он начинаться с field
или быть более точным в отношении формата с помощью регулярного выражения.
Переберите data.channel
с for/in
, проверьте, начинается ли ключ с ключевого слова, и, если да, добавьте значение этого свойства в новый объект, используя этот ключ.
const data = { "channel": { "id": "", "name": "INA229 Measurement", "description": "Test with INA229", "latitude": "0.0", "longitude": "0.0", "field1": "Voltage", "field2": "Current", "field3": "Power", "field4": "Temperature", "created_at": "2022-04-07T08:40:24Z", "fieldTest": "Test", "updated_at": "2022-04-07T08:40:52Z", "last_entry_id": 3771 }, "feeds": [] };
const out = {};
for (const key in data.channel) {
if (key.startsWith('field')) {
out[key] = data.channel[key];
}
}
console.log(out);
Спасибо. Я использую это решение.
Отличный пример. Спасибо, братан!