Ric*_*hez 4 javascript functional-programming ecmascript-6
var obj = {
111: {
user_id: 111,
user_name: "user111",
isActive: 0
},
112: {
user_id: 112,
user_name: "use112",
isActive: 1
},
113: {
user_id: 113,
user_name: "use113",
isActive: 0
},
...
}
Run Code Online (Sandbox Code Playgroud)
我想过滤所有内容,("isActive" === 0)但在返回newObj时保持键集相同(其值等于用户ID):
newObj = {
111: {
user_id: 111,
user_name: "user111",
isActive: 0
},
113: {
user_id: 113,
user_name: "use113",
isActive: 0
},
...
}
Run Code Online (Sandbox Code Playgroud)
这就是我现在所拥有的:
let newObj = Object.values(obj).filter( user => ( (obj.isActive === 0)));
Run Code Online (Sandbox Code Playgroud)
返回索引键
.forEach()必须使用ES6 )。真正的FP方式是reduce重复对象扩散:
const filtered = Object.values(obj).reduce((p, e) => (!e.isActive ? {...p, [e.user_id]: e} : p), {});
Run Code Online (Sandbox Code Playgroud)
const filtered = Object.values(obj).reduce((p, e) => (!e.isActive ? {...p, [e.user_id]: e} : p), {});
Run Code Online (Sandbox Code Playgroud)
const obj = {
111: {
user_id: 111,
user_name: "user111",
isActive: 0
},
112: {
user_id: 112,
user_name: "use112",
isActive: 1
},
113: {
user_id: 113,
user_name: "use113",
isActive: 0
}
};
const filtered = Object.values(obj).reduce((p, e) => (!e.isActive ? {...p, [e.user_id]: e} : p), {});
console.log(filtered);Run Code Online (Sandbox Code Playgroud)
这会创建很多不必要的临时对象,但是通过不修改对象来遵守FP原则(我认为,我对FP并不“深入” :)。
稍微修改一下规则,我们可能会修改单个对象,而不是创建大量临时对象:
const filtered = Object.values(obj).reduce((newObj, e) => {
if (!e.isActive) {
newObj[e.user_id] = e;
}
return newObj;
}, {});
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
max-height: 100% !important;
}Run Code Online (Sandbox Code Playgroud)
const filtered = Object.values(obj).reduce((newObj, e) => {
if (!e.isActive) {
newObj[e.user_id] = e;
}
return newObj;
}, {});
Run Code Online (Sandbox Code Playgroud)
(通过滥用逗号运算符,可以用更少的字符来编写该代码,但它的维护性较差,并且更难阅读。)
没有FP限制,我只是使用一个循环:
const filtered = {};
for (const e of Object.values(obj)) {
if (!e.isActive) {
filtered[e.user_id] = e;
}
}
Run Code Online (Sandbox Code Playgroud)
const obj = {
111: {
user_id: 111,
user_name: "user111",
isActive: 0
},
112: {
user_id: 112,
user_name: "use112",
isActive: 1
},
113: {
user_id: 113,
user_name: "use113",
isActive: 0
}
};
const filtered = Object.values(obj).reduce((newObj, e) => {
if (!e.isActive) {
newObj[e.user_id] = e;
}
return newObj;
}, {});
console.log(filtered);Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper {
max-height: 100% !important;
}Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |