替换数组中的元素

时间:2016-06-28 07:29:03

标签: javascript arrays

需要在数组中用“#”替换值“y”,还需要计算数组中的“y”值。

x = ['a','b','c'];
z = ['z','y','y'];

var a = x.concat(z);
var b = a.sort();
var count = 0;
for(var i = 0; i < b.length; i++){
    if(b[i] == "y") {
            b['y'] == "#";
        var c = count++;
    }
}
console.log(b);
console.log(c+1);

Fiddle

6 个答案:

答案 0 :(得分:4)

  • 声明所有变量
  • 指定正确的值,不要进行比较b[i] = "#";
  • 使用count变量,而不是c
  • 无需使用b,因为sort对给定的数组进行排序。

var x = ['a', 'b', 'c'];
var z = ['z', 'y', 'y'];
var a = x.concat(z);
var count = 0;

a.sort();
for (var i = 0; i < a.length; i++){
    if (a[i] == "y") {
        a[i] = "#";
        count++;
    }
}
console.log(a);
console.log(count);

答案 1 :(得分:4)

您可以使用reduce进行解构分配,以有效地返回2个值

var x = ['a','b','c']
var z = ['z','y','y']
var a = x.concat(z)
var [count, b] = a.reduce(([count,b],x)=> {
  if (x === 'y')
    return [count + 1, [...b, '#']]
  else
    return [count, [...b, x]]
}, [0, []])

console.log(count) // 2
console.log(b)     // ['a', 'b', 'c', 'z', '#', '#']

如果您真的希望在替换'y'之前对数组进行排序并获取计数,您应该知道Array.prototype.sort将改变原始数组。此外,通过引用将数组赋值给变量。

所以当你写这个......

var b = a.sort();

您应该知道a将被排序,而b只是对完全相同数组的第二次引用。 b 是单独的副本。

如果您想制作单独的副本,可以执行此操作

// make B a sorted copy of A. do not modify A.
var b = a.slice(0).sort();

答案 2 :(得分:3)

==是比较运算符 =是赋值运算符

更改为:

for(var i = 0; i < b.length; i++){
    if(b[i] == "y") {
  

b [i] =&#34;#&#34 ;;

        var c = count++;
    }
}

来自

for(var i = 0; i < b.length; i++){
    if(b[i] == "y") {
  

b [&#39; y&#39;] ==&#34;#&#34 ;;

        count++;
    }
}

&#13;
&#13;
x = ['a', 'b', 'c'];
z = ['z', 'y', 'y'];

var a = x.concat(z);
var b = a.sort();
var count = 0;
for (var i = 0; i < b.length; i++) {
  if (b[i] == "y") {
    b[i] = "#";
    count++;
  }
}
console.log(b);
console.log(count);
&#13;
&#13;
&#13;

答案 3 :(得分:2)

您也可以使用Array#map

&#13;
&#13;
var x = ['a','b','c'];
var z = ['z','y','y'];

var a = x.concat(z);
var b = a.sort();
var count = 0;

b = b.map(function(v) {
  if(v == 'y') {
    count++;
    return '#';
  } else {
    return v;
  }
});

console.log(b);
console.log(count);
&#13;
&#13;
&#13;

答案 4 :(得分:1)

我不确定,但这是你想要的吗?

&#13;
&#13;
x = ['a','b','c'];
z = ['z','y','y'];

var a = x.concat(z);
var b = a.sort();
var count = 0;
for(var i = 0; i < b.length; i++){
    if(b[i] == "y") {
    		b[i] = "#";
        var c = count++;
    }
}
console.log(b);
console.log(c+1);
&#13;
&#13;
&#13;

jsfiddle

答案 5 :(得分:1)

如果您是较少代码行的粉丝,那么这一行(或两行)实现将是显而易见的。 ;)

但是我回答的主要原因是排序返回值。 如documentation中所述:

  

sort()方法对数组中的元素进行排序并返回    数组。排序不一定稳定。默认排序顺序    是根据字符串Unicode代码点。

因此sort()方法执行操作也会返回结果(数组)。

&#13;
&#13;
var x = ['a', 'b', 'c'],
    z = ['z', 'y', 'y'],
    toReplace = 'y',
    replaceWith = '#',
    count = 0;

var result = x.concat(z).sort()
  .map((v, i, a) => v === toReplace ? ++count && replaceWith : v);

console.log(result, count);
&#13;
&#13;
&#13;