1

我的代码

const upperCase = 'QWERTYUIOPASDFGHJKLZXCVBNM'.split('');
const lowerCase = 'qwertyuiopasdfghjklzxcvbnm'.split('');
const numbers = '1234567890'.split('');
const symbols = '@#£&*()\'"%-+=/;:,.€$¥_^[]{}§|~…\\<>!?'.split('');
var exclude = [];
var fullList = [];
var allowUpperCase = true;
var allowLowerCase = true;
var allowSymbols = true;
var allowNumbers = true;

function genList() {
    if (allowUpperCase) {
        fullList.concat(upperCase);
    }
    if (allowLowerCase) {
        fullList.concat(lowerCase);
    }
    if (allowSymbols) {
        fullList.concat(symbols);
    }
    if (allowNumbers){
      fullList.concat(numbers)
    }
}

genList();
console.log(fullList);

它应该做什么:基本上是检查用户是否想要这些字符,然后将它们添加到“fullList”数组中

但是当我这样做时genListconsole.log(fullList)它似乎是空的 []

为什么?

4

3 回答 3

1

由于您正在寻找改变fullList数组,您可以使用Array#push()和传播传递的数组,而不是使用Array#concat().

这避免了在每个条件匹配时创建一个新数组并简单地扩展现有数组。

const upperCase = 'QWERTYUIOPASDFGHJKLZXCVBNM'.split('');
const lowerCase = 'qwertyuiopasdfghjklzxcvbnm'.split('');
const numbers = '1234567890'.split('');
const symbols = '@#£&*()\'"%-+=/;:,.€$¥_^[]{}§|~…\\<>!?'.split('');
var exclude = [];
var fullList = [];
var allowUpperCase = true;
var allowLowerCase = true;
var allowSymbols = true;
var allowNumbers = true;

function genList() {
  if (allowUpperCase) {
    fullList.push(...upperCase);
  }
  if (allowLowerCase) {
    fullList.push(...lowerCase);
  }
  if (allowSymbols) {
    fullList.push(...symbols);
  }
  if (allowNumbers) {
    fullList.push(...numbers)
  }
}

genList();
console.log(fullList.join(', '));

于 2021-08-14T11:47:31.990 回答
0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/concat

数组 concat 方法不会修改当前数组,而是返回一个新数组。像这样修改方法,它将起作用。

function genList() {
    if (allowUpperCase) {
        fullList = fullList.concat(upperCase);
    }
    if (allowLowerCase) {
        fullList = fullList.concat(lowerCase);
    }
    if (allowSymbols) {
        fullList = fullList.concat(symbols);
    }
    if (allowNumbers){
        fullList = fullList.concat(numbers)
    }
}
于 2021-08-14T11:42:59.223 回答
0

Array 方法concat参见 MDN Web Docs)不会改变原始数组,它返回一个新数组。

const upperCase = 'QWERTYUIOPASDFGHJKLZXCVBNM'.split('');
const lowerCase = 'qwertyuiopasdfghjklzxcvbnm'.split('');
const numbers = '1234567890'.split('');
const symbols = '@#£&*()\'"%-+=/;:,.€$¥_^[]{}§|~…\\<>!?'.split('');
var exclude = [];
var fullList = [];
var allowUpperCase = true;
var allowLowerCase = true;
var allowSymbols = true;
var allowNumbers = true;

function genList() {
    if (allowUpperCase) {
        fullList = fullList.concat(upperCase);
    }
    if (allowLowerCase) {
        fullList = fullList.concat(lowerCase);
    }
    if (allowSymbols) {
        fullList = fullList.concat(symbols);
    }
    if (allowNumbers){
        fullList = fullList.concat(numbers);
    }
    console.log(fullList);
}

genList();

于 2021-08-14T11:43:13.427 回答