#javascript #arrays #object
#javascript #массивы #объект
Вопрос:
Мне нужно отфильтровать значение объектов в новый массив amp;amp; передать это значение в массив только в том случае, если его ключ найден в массиве // Я почти уверен, что найдется способ сделать это, я просто пытаюсь применить его к моей текущей модели.
Приведенный ниже пример того, с чем я пытался работать
Файл JSON содержит массив объектов —
Я отфильтровал выбранный объект и сохранил его ключи в отдельном массиве (за вычетом некоторых, которые мне не нужны):
let labelValues = () => {
// Filter the JSON data to remove not wanted
// This is explicit so will need to be written to be dynamic
// Data also is apearing out of context
return Object.keys(data[0]).filter((e)=>{
if(e == 'COMPANY' || e == 'HEADQUARTERS' || e == 'TOTAL'){
return false
}
return true
})
}
Это оставляет меня с:
let X = ["JANUARY", "FEBUARY", "APRIL", "MARCH", "FEBUARY_1", "MAY"]
Теперь мне нужно создать новый массив — путем повторения объекта и передачи значения в массив только в том случае, если КЛЮЧ объектов находится в вышеупомянутом массиве X
Пример структуры данных объекта:
let obj = {
APRIL: 35
COMPANY: "Walmart"
FEBUARY: 34
FEBUARY_1: 9
HEADQUARTERS: "Bentonville, AR"
JANUARY: 22.6
MARCH: 23.4
MAY: 21.1
TOTAL: 145.1
}
желаемый массив будет:
[35,34,9,22.6,23.4,21.1]
Заранее спасибо —
Уолли
Комментарии:
1. Нет — извините, это была опечатка с моей стороны — я обновлю
Ответ №1:
for
цикл можно использовать для перехода по ключам объекта и добавления значений :
var obj = { APRIL: 35, COMPANY: "Walmart", FEBUARY: 34, FEBUARY_1: 9,
HEADQUARTERS: "Bentonville, AR", JANUARY: 22.6, MARCH: 23.4, MAY: 21.1, TOTAL: 145.1 }
var arr = []
for (var key in obj)
if (key !== 'COMPANY' amp;amp; key !== 'HEADQUARTERS' amp;amp; key !== 'TOTAL')
arr.push(obj[key])
console.log( JSON.stringify( arr ) )
console.log( '[35,34,9,22.6,23.4,21.1]' )
Это также можно сделать во время синтаксического анализа :
var json = '{"APRIL":35,"COMPANY":"Walmart","FEBUARY":34,"FEBUARY_1":9,"HEADQUARTERS":"Bentonville, AR","JANUARY":22.6,"MARCH":23.4,"MAY":21.1,"TOTAL":145.1}'
var arr = []
JSON.parse(json, (k, v) => !isNaN(v) amp;amp; k !== 'TOTAL' amp;amp; arr.push(v))
console.log( JSON.stringify( arr ) )
Ответ №2:
Итак, в этом случае:
let values = obj.map((item)=>{
// if items key is not found do not pass it to the new array
if(item.Object.key != X){
return false
}
return item
})
Это оставило бы вас с массивом истинных / ложных значений.
Вот короткий фрагмент кода, который я написал, который должен делать то, что вы хотите, чтобы он делал:
const obj = {
APRIL: 35,
COMPANY: 'Walmart',
FEBUARY: 34,
FEBUARY_1: 9,
HEADQUARTERS: 'Bentonville, AR',
JANUARY: 22.6,
MARCH: 23.4,
MAY: 21.1,
TOTAL: 145.1,
};
const notInclude = ['COMPANY', 'HEADQUARTERS', 'TOTAL'];
let labelValues = () => {
return Object.keys(obj).filter((val) => !notInclude.includes(val));
};
const data = labelValues();
const result = data.map((val) => obj[val]);
console.log(data);
console.log(result);
Это должно сработать, но дайте мне знать, если это не имеет смысла!
Комментарии:
1. Привет, Грэм — Это удивительно для вашего ввода, однако, похоже, что это не сработало так, как задумано — я отредактировал свой вопрос, чтобы уточнить результат, который я ищу. Еще раз спасибо за ваш вклад (также дайте мне знать, если я ошибаюсь, и вышеупомянутое работает в этом контексте) — еще раз спасибо — W
2. Я смотрю на это и теперь думаю, потому что это OBJ, мне нужно сначала создать массив, а затем вставить () значение в массив, если ключ найден?
3. @Wally Взгляните на это и дайте мне знать, имеет ли это больше смысла!
4. Да, это решает проблему более плавным способом, чем у меня: P спасибо за вашу помощь 🙂
Ответ №3:
Хорошо, итак, я понял это …. и теперь я чувствую себя несколько глупо, что ответ так прост….
в основном —
создайте новый массив, т.е.
пусть array = []
затем со значениями ключей запустите forEach для этого, перенося данные в новый массив, т.Е.
values.forEach(value => {
array.push(data[0][value])
})
Кстати, данные [0] будут динамическими — просто используйте их в качестве ссылки на данный момент
ГЛУПЫЙ, ГЛУПЫЙ Я!
спасибо за вашу помощь