#javascript #arrays #date #object #filtering
#javascript #массивы #Дата #объект #фильтрация
Вопрос:
Я пытаюсь получить сведения о сбое на основе даты. Для этого я применяю array.filter, но он возвращает пустой массив.
Ниже приведен мой массив:
value:[{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 2
},
{
"Reason": "Reason2",
"Count": 6
}
]
}, {
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 3
}, {
"Reason": "Reason2",
"Count": 1
}]
}]
И если я укажу дату как 02/04/2019, она должна вернуть следующее:
{
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 2
},
{
"Reason": "Reason2",
"Count": 6
}
]
}
Я использую приведенный ниже метод array.filter:
var filtered = value.filter(isPresent);
function isPresent(value) {
return value == 02/04/2019;
}
это возвращает пустой массив.
Может кто-нибудь, пожалуйста, понять меня, где я ошибаюсь?
Комментарии:
1.
return value.Date == "02/04/2019";
может быть?2. Что такое isPresent? пожалуйста, поделитесь условием, которое вы применяете, используя isPresent
3. присутствует не что иное, как функция, написанная ниже
4. Хорошо, я добавил ответ, основанный на вашем коде. Вы также можете протестировать его в консоли браузера, прежде чем внедрять в свой код.
5. Пожалуйста, поднимите вопрос, сработало ли это для вас. Спасибо!
Ответ №1:
Вот рабочий код, основанный на вашем массиве.
var value = [{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 2
},
{
"Reason": "Reason2",
"Count": 6
}
]
}, {
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 3
}, {
"Reason": "Reason2",
"Count": 1
}]
}];
var filtered = value.filter (isPresent).map (obj => obj.FailureDeatils);;
function isPresent (value) {
return value.Date == "02/04/2019";
}
console.log (filtered);
Ответ №2:
В вашей функции isPresent
, value
является ли каждый объект в массиве
И вы сравниваете весь объект со значением
Что вам нужно сделать, так это сравнить свойство object этого объекта
function isPresent(value) {
return value.Date == "02/04/2019";
}
Комментарии:
1. Спасибо!! Я могу получить все данные сейчас, но мне нужны только детали сбоя из этого
Ответ №3:
Вам нужно проверять value.Date
, а не value
потому что value
, иначе параметр обратного вызова будет содержать всю итерацию object
из вашего array
:
function isPresent(value) {
return value.Date amp;amp; value.Date == "02/04/2019";
}
Чтобы получить только FailureDeatils
из вашего отфильтрованного object
, вы можете сопоставить
отфильтрованный результат с помощью Array#map()
метода:
var filtered = data.filter(isPresent).map(o => { return {"FailureDeatils": o.FailureDeatils}});
Примечание:
- Обязательно перенесите
"02/04/2019"
между""
, чтобы его можно было оценить какstring
и правильно сравнить, в противном случае он будет вычислен и обработан какNumber
и даст неправильные результаты фильтрации. - Избегайте использования одного и того же имени переменной
value
дважды для вашего массива и для параметра обратного вызова для лучшей читаемости вашего кода.
ДЕМОНСТРАЦИЯ:
var data = [{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 2
},
{
"Reason": "Reason2",
"Count": 6
}
]
}, {
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 3
}, {
"Reason": "Reason2",
"Count": 1
}]
}]
var filtered = data.filter(isPresent).map(e => { return {"FailureDeatils": e.FailureDeatils}});
function isPresent(value) {
return value.Date amp;amp; value.Date == "02/04/2019";
}
console.log(filtered);
Ответ №4:
Вы должны сделать так —
const value = [{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 2
},
{
"Reason": "Reason2",
"Count": 6
}
]
}, {
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 3
}, {
"Reason": "Reason2",
"Count": 1
}]
}]
const filtered = value.filter((x) => x.Date === "02/04/2019");
Ответ №5:
const value = [{
"Date": "02/04/2019",
"Total": "1000",
"Success": "850",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 2
},
{
"Reason": "Reason2",
"Count": 6
}
]
}, {
"Date": "03/04/2019",
"Total": "800",
"Success": "750",
"Failure": "150",
"FailureDeatils": [{
"Reason": "Reason1",
"Count": 3
}, {
"Reason": "Reason2",
"Count": 1
}]
}]
var filtered = value.filter(isPresent).map(row => {
return {
FailureDeatils : row.FailureDeatils
}
});
function isPresent(value) {
return value.Date === "02/04/2019";
}
console.log(filtered)
Ответ №6:
Вы можете сделать:
const value = [{"Date": "02/04/2019","Total": "1000","Success": "850","Failure": "150","FailureDeatils":[{"Reason":"Reason1","Count":2}, {"Reason":"Reason2","Count":6}]},{"Date": "03/04/2019","Total": "800","Success": "750","Failure": "150","FailureDeatils": [{"Reason":"Reason1","Count":3},{"Reason":"Reason2","Count":1}]}];
const isPresent = ({Date}) => Date === '02/04/2019';
const filtered = value.filter(isPresent);
console.log(filtered);
Ответ №7:
var filtered = value.filter(function(a){
return a.Date === "02/04/2019";
});
Комментарии:
1.
02/04/2019
будет вычислено здесь, смотрите результатconsole.log(02/04/2019)