Массив угловых фильтров, содержащий только 1 объект со значением true

#javascript #arrays #angular #typescript #object

#javascript #массивы #угловой #typescript #объект

Вопрос:

Я хочу отфильтровать этот объект

 var tabledata = [
    0: {Email: "user1@test.com", APP1: true, APP2: false, APP3: false, APP4: true}
]
  

я хочу, чтобы только значение EMAIL и TRUE отображались следующим образом.

 var tabledata = [
    0: {"Email":"user1@test.com","APP1":true,"APP4":true}
]
  

или вот так

 var tabledata = {"Email":"user1@test.com","APP1":true,"APP4":true}
  

Ответ №1:

Вы могли бы переназначить свой tabledata подобный:

 let tabledata = [
    {Email: "user1@test.com", APP1: true, APP2: false, APP3: false, APP4: true},
    {Email: "abc@you.com", APP1: false, APP2: false, APP3: true, APP4: false},
];


let result = tabledata.map((item) => {
    let dict = {};
    for (key in item) {
        if (item[key]) {
            dict[key] = item[key] 
        }
    }
    return dict;
})

console.log(result)  

Ответ №2:

похоже, это работает.

 var tabledata_2 = {}
let objects = Object.values(tabledata)                      
    for(var i=0; i<objects.length; i  ) {
       for(var key in objects[i]) {               
       if (!!objects[i][key]) {
       tabledata_2[key] = tabledata[0][key];
       }
     }
    console.log(tabledata_2) 
    }
  

Ответ №3:

Вы можете сделать так.

 var tabledata-2 = {}

for (key : tabledata[0].keys()) {
    if (key === 'Email' || tabledata[0][key]) {
       tabledata-2[key] = tabledata[0][key];
    }
}
  

Комментарии:

1. привет, мне нужно фильтровать по значению true, а не по ключу.

2. Хорошо, я отредактировал, теперь в tablevalue_2 будут только истинные значения

3. Также должна ли «Электронная почта» всегда находиться в отфильтрованном объекте?

4. Хорошо, выше я отредактировал соответствующим образом… Все должно быть хорошо

Ответ №4:

Это недопустимый синтаксис в JavaScript:

 var tabledata = [
    0: {Email: "user1@test.com", APP1: true, APP2: false, APP3: false, APP4: true}
]
  

Я полагаю, вы имеете в виду, что tabledata является объектом:

 var tabledata = {
    0: {Email: "user1@test.com", APP1: true, APP2: false, APP3: false, APP4: true}
}
  

Кроме того, с точки зрения JavaScript это не имеет значения, если вы пишете:

 {"Email": "..."}
  

или

 {Email: "..."}
  

до тех пор, пока ключ объекта не содержит специальных символов.

Если вы хотите отобразить свой объект функциональным способом, вы используете reduce и map:

 Object.values(tabledata).map(entry => {
  // Remove values that are false.
  const filteredProperties = Object.entries(entry)
    .reduce((acc, [key, value]) => value !== false ? [...acc, [key, value]] : acc, []);
  return Object.fromEntries(filteredProperties);
})
  

Тогда это даст вам:

 [
  {Email: "user1@test.com", APP1: true, APP4: true}
]

  

Если tabledata является массивом, задание немного проще, кстати (я не уверен из вашего сообщения, действительно ли tabledata является объектом, или вы скопировали строку из консоли):

 tabledata.map(entry => {
  const filteredProperties = Object.entries(entry)
    .reduce((acc, [key, value]) => value !== false ? [...acc, [key, value]] : acc, []);
  return Object.fromEntries(filteredProperties);
})