首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在与Python的多变量赋值等价的JS?

是否存在与Python的多变量赋值等价的JS?
EN

Stack Overflow用户
提问于 2022-03-30 20:33:15
回答 1查看 93关注 0票数 0

Python有一种简洁的方法,可以将带有参数的函数赋值给多个变量,这是以一行方式完成的。我想知道JavaScript是否有相同的或类似的方法。

我已经找到了几个例子描述了JavaScript的多个变量赋值,使用了多个赋值和析构。这些方法的问题是,它们可以或确实要求变量与值相等:let a = b = c = some_valuelet [a, b] = [x, y]。这就是我对特定代码部分有问题的地方。

Python

代码语言:javascript
复制
#!/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

代码语言: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相同或类似的模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-30 21:14:08

在这个问题中,您声明不能使用析构。然而,解构,更准确地说,一个正是在这里使用的工具,所以您确实应该使用它。(嗯,除了它是多余的,但稍后会有更多的讨论。)

下面是如何将Python代码进行1:1的转换(除了ECMAScript没有元组之外)到ECMAScript:

代码语言:javascript
复制
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代码中,numbersdivide都返回,而ECMAScript没有元组,因此,在ECMAScript代码中,它们返回。

但是,请注意,在Python和ECMAScript版本中,numbers都会对divide的返回值进行重构,只会将其与完全相同的数据结构放在一起,这样您就可以去掉大部分代码:

代码语言:javascript
复制
function numbers(arr) {
    if (arr.length <= 1) {
        return arr;
    }

    return divide(arr);
}
代码语言:javascript
复制
def numbers(arr):
  if len(arr) <= 1:
    return arr

  return divide(arr)

您还会注意到,我在const代码中将所有变量更改为ECMAScript,因为您没有修改它们的绑定。

但是,这个API很奇怪,很难使用,因为numbers函数根据参数数组的长度返回两个完全不同的东西。它要么返回数字数组,要么返回数组数字数组(在ECMAScript中,它返回一个数组数组)。这使得调用者更难使用,因为不同的返回类型需要被不同的对待。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71683800

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档