#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);
})