Python有一种简洁的方法,可以将带有参数的函数赋值给多个变量,这是以一行方式完成的。我想知道JavaScript是否有相同的或类似的方法。
我已经找到了几个例子描述了JavaScript的多个变量赋值,使用了多个赋值和析构。这些方法的问题是,它们可以或确实要求变量与值相等:let a = b = c = some_value或let [a, b] = [x, y]。这就是我对特定代码部分有问题的地方。
Python
#!/usr/bin/env python3
def numbers(arr):
if len(arr) <= 1:
return arr
left_half, right_half = divide(arr) # The code in question; Multi-variable assignment
return left_half, right_half
def divide(arr):
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]
return left, right
l = [12, 45, 9, 2, 5]
print(numbers(l)) # ...([12, 45],[9, 2, 5])JavaScript
function numbers(arr) {
if (arr.length <= 1) {
return arr;
}
let leftHalf, rightHalf = divide(arr); // The not-so-equivalent code
return leftHalf, rightHalf;
}
function divide(arr) {
let mid = Math.floor(arr.length / 2);
let left = arr.slice(0, mid);
let right = arr.slice(mid);
return left, right;
}
const l = [12, 45, 9, 2, 5];
console.log(numbers(l)); // ...[9, 2, 5]如何在JavaScript代码中实现与Python相同或类似的模式?
发布于 2022-03-30 21:14:08
在这个问题中,您声明不能使用析构。然而,解构,更准确地说,一个正是在这里使用的工具,所以您确实应该使用它。(嗯,除了它是多余的,但稍后会有更多的讨论。)
下面是如何将Python代码进行1:1的转换(除了ECMAScript没有元组之外)到ECMAScript:
function numbers(arr) {
if (arr.length <= 1) {
return arr;
}
const [leftHalf, rightHalf] = divide(arr);
return [leftHalf, rightHalf];
}
function divide(arr) {
const mid = Math.floor(arr.length / 2);
const left = arr.slice(0, mid);
const right = arr.slice(mid);
return [left, right];
}ECMAScript代码与Python代码的唯一不同之处在于,在Python代码中,numbers和divide都返回,而ECMAScript没有元组,因此,在ECMAScript代码中,它们返回。
但是,请注意,在Python和ECMAScript版本中,numbers都会对divide的返回值进行重构,只会将其与完全相同的数据结构放在一起,这样您就可以去掉大部分代码:
function numbers(arr) {
if (arr.length <= 1) {
return arr;
}
return divide(arr);
}def numbers(arr):
if len(arr) <= 1:
return arr
return divide(arr)您还会注意到,我在const代码中将所有变量更改为ECMAScript,因为您没有修改它们的绑定。
但是,这个API很奇怪,很难使用,因为numbers函数根据参数数组的长度返回两个完全不同的东西。它要么返回数字数组,要么返回数组数字数组(在ECMAScript中,它返回一个数组数组)。这使得调用者更难使用,因为不同的返回类型需要被不同的对待。
https://stackoverflow.com/questions/71683800
复制相似问题