从现有阵列扩展数组?

时间:2017-02-19 03:23:43

标签: javascript

目前,我有一个数组(@id = "Price"),其中包含将[1, 3]的值更改为key的索引

有没有什么好方法可以改进这段代码,所以我不必指定变量false中显示的默认值?

这是因为默认的对象数组可能很大(下面的代码是我应用程序的一个简化问题..)

b

4 个答案:

答案 0 :(得分:1)

  

“有没有什么好方法可以改进这段代码,所以我不必指定默认值,如变量b所示?这是因为默认的对象数组可能很大”< / EM>

我对您的问题的解释如下:“我如何创建一个潜在的巨大对象数组,其中所有对象都默认为{key: true} ,除了,对于那些在另一个数组中指定的索引,应该是{key: false}?“我假设你当时知道你想要多少个物体。

鉴于您为了问题的目的简化了事情,很难说什么是“最佳”。我怀疑可能有一个比你在b中显示的更合适的数据结构,但没有关于你的真实代码的更多信息,我猜测没有意义。

因此,要创建一个对象数组,其中所有对象默认为相同的key值,而不是可能的“巨大”数组文字,您只需使用循环:

const b = new Array(desiredNumberOfObjects)
for (let i = 0; i < b.length; i++)
  b[i] = { key: true }

...然后运行现有的[1, 3].forEach(...)将所需的项目设置为false

这样会有相当的效率,因为它只会遍历主b数组和例外数组。

答案 1 :(得分:0)

试试这个:

public static String cipher(String input2, Integer number) {
        StringBuilder builder = new StringBuilder(input2.length());
        int k = number;
        int lowerBoundlc = 97;
        int upperBoundlc = 122;
        int lowerBounduc = 65;
        int upperBounduc = 90;
        for (int i = 0; i < input2.length(); i++) {
            char c = input2.charAt(i);
            int j = (int) c;
            if ((lowerBoundlc <= j && j <= upperBoundlc) || (j == 45)) {
                if (j == 45) {
                    builder.append((char) j);
                } else {
                    int addk = j + k;
                    if (addk > upperBoundlc) {
                        int lowercase = addk % upperBoundlc;
                        int resultlc = lowerBoundlc + lowercase -1;
                        builder.append((char) resultlc);
                    } else {
                        builder.append((char) addk);
                    }
                }

            } else {
                if ((lowerBounduc <= j && j <= upperBounduc) || (j == 45)) {
                    int addnewk = j + k;
                    if (addnewk > upperBounduc) {
                        int uppercase = addnewk % upperBounduc;
                        int resultuc = lowerBounduc + uppercase -1;
                        builder.append((char) resultuc);
                    } else {
                        builder.append((char) addnewk);
                    }
                }
            }
        }
        return builder.toString();    
    }

并非未定义其间的值。如果这是一个问题,我建议使用函数检查值,如下所示:

//Specify default value
const b = [];

[1, 3].forEach((x) => {
  if (b[x]) {
    b[x].key = false;
  } else {
    b[x] = { key: false };
  }
})

console.log(b);

答案 2 :(得分:0)

你需要知道数组应该有多大。让我们说它是6.然后你可以用Array.frombefore_insert_rows(self, rows, **kwargs)参数初始化数组:

&#13;
&#13;
mapFn
&#13;
&#13;
&#13;

您可能想要使用const b = Array.from(Array(6), () => ({key: true})); [1, 3].forEach(x => b[x].key = false); console.log(b);

fill

但这不会按预期工作,因为相同的对象将放置在数组中的每个位置。

答案 3 :(得分:0)

您可以存储属性名称以设置变量;使用Array.prototype.entries()for..of循环处迭代数组的索引和值,将对象的property的值设置为Boolean,在索引数组上调用.indexOf()的返回值。

&#13;
&#13;
const arr = [
  { a: 1 },
  { b: 2 },
  { c: 3 },
  { d: 4 },
  { e: 5 }
];

let [indexes, prop] = [[1, 3], `key`];

for (let [key, value] of arr.entries()) value[prop] = indexes.indexOf(key) > -1;

console.log(arr);
&#13;
&#13;
&#13;