- 已关闭**。此问题需要超过focused。当前不接受答案。
- 想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。
22小时前关门了。
Improve this question
最近,我在一家公司面试,接到了一个测试任务:
Implement a function that accepts any data type and convert the boolean type (if any) to a numeric value.
Objects of any nesting level, arrays, strings, numbers, etc. can be used as parameters.
示例:
booleanToInt('qwerty') // 'qwerty'
booleanToInt(1) // 1
booleanToInt(false) // 0
booleanToInt(true) // 1
booleanToInt([1, 'qwerty', false]) // [1, 'qwerty', 0]
booleanToInt([1, 'qwerty', { a: true }]) // [1, 'qwerty', { a: 1 }]
booleanToInt({ a: { b: true }, c: false, d: 'qwerty' }) // { a: { b: 1 }, c: 0, d: 'qwerty' }
我写了自己的实现,但我被告知这太复杂了,而且是一个大的解决方案。对于我的问题,我可以优化什么以及在哪里优化,没有给我答案。
我的决定:
// Checking for an object
function isObject(value) {
return typeof value === "object" && !Array.isArray(value) && value !== null;
}
// Transforming an object
function transformObject(obj) {
Object.keys(obj).forEach((key) => {
if (isObject(obj[key])) {
transformObject(obj[key]);
} else if (Array.isArray(obj[key])) {
transformArray(obj[key]);
} else {
obj[key] = transformStatic(obj[key]);
}
});
}
// Transforming the array
function transformArray(list) {
list.forEach((item, i) => {
if (isObject(item)) {
transformObject(item);
} else if (Array.isArray(item)) {
transformArray(item);
} else {
list[i] = transformStatic(item);
}
});
}
// Transforming Static Types
function transformStatic(value) {
let res = value;
if (typeof value === "boolean") {
res = +value;
}
return res;
}
// main function
function booleanToInt(value) {
if (isObject(value)) {
transformObject(value);
return value;
}
if (Array.isArray(value)) {
transformArray(value);
return value;
}
return transformStatic(value);
}
console.log(booleanToInt("qwerty")); // 'qwerty'
console.log(booleanToInt(1)); // 1
console.log(booleanToInt(false)); // 0
console.log(booleanToInt(true)); // 1
console.log(booleanToInt([1, "qwerty", false])); // [1, 'qwerty', 0]
console.log(booleanToInt([1, "qwerty", { a: true }])); //[1, 'qwerty', { a: 1 }]
LIVE HERE
我想知道还能想出什么其他的算法?也许会更短更简洁?
1条答案
按热度按时间3ks5zfa01#
我会将其简化为单个函数并使用
for ... in