在数组中获取错误的输出,javascript

时间:2017-01-11 10:11:55

标签: javascript jquery arrays

我收到了错误的输出,我在数组400中存储的值大于arr[]我希望将值450, 650存储在arr[]和我的arr[]400长度应为2(2),因为有两个值大于var total = [300, 350, 450, 650]; var arr = []; for (var i = 0; i < total.length; i++) { if (parseInt(total[i]) >= 400) { arr[i] = total[i]; } } alert(arr.length); alert(arr);,但输出错误。

array length value inside array

&#13;
&#13;
>>> val data = List(
    ("India","A1","Q1",40),
    ("India","A2","Q1",30),
    ("India","A3","Q1",21),
    ("German","A1","Q1",50),
    ("German","A3","Q1",60),
    ("US","A1","Q1",60),
    ("US","A2","Q2",25),
    ("US","A4","Q1",20),
    ("US","A5","Q5",15),
    ("US","A3","Q3",10)
)

>>> val df = sc.parallelize(data).toDF("country", "part", "quarter", "result")
>>> df.show()

+-------+----+-------+------+
|country|part|quarter|result|
+-------+----+-------+------+
|  India|  A1|     Q1|    40|
|  India|  A2|     Q1|    30|
|  India|  A3|     Q1|    21|
| German|  A1|     Q1|    50|
| German|  A3|     Q1|    60|
|     US|  A1|     Q1|    60|
|     US|  A2|     Q2|    25|
|     US|  A4|     Q1|    20|
|     US|  A5|     Q5|    15|
|     US|  A3|     Q3|    10|
+-------+----+-------+------+

>>> val window = Window.partitionBy("country").orderBy("part", "quarter")
>>> val resultDF = df.withColumn("agg", sum(df("result")).over(window))
>>> resultDF.show()

+-------+----+-------+------+---+
|country|part|quarter|result|agg|
+-------+----+-------+------+---+
|  India|  A1|     Q1|    40| 40|
|  India|  A2|     Q1|    30| 70|
|  India|  A3|     Q1|    21| 91|
|     US|  A1|     Q1|    60| 60|
|     US|  A2|     Q2|    25| 85|
|     US|  A3|     Q3|    10| 95|
|     US|  A4|     Q1|    20|115|
|     US|  A5|     Q5|    15|130|
| German|  A1|     Q1|    50| 50|
| German|  A3|     Q1|    60|110|
+-------+----+-------+------+---+
&#13;
&#13;
&#13;

5 个答案:

答案 0 :(得分:2)

您通过索引定义数组元素,该索引导致数组具有一些 A B C 0 1 9 1.0 1 2 8 2.0 2 3 7 3.0 3 4 6 4.0 4 5 5 2.5 5 6 4 2.4 6 7 3 2.1 7 8 2 1.6 8 9 1 0.9 值(定义的较大索引中的未定义索引)。而是使用Array#push以正确的方式添加数组元素。

%timeit

答案 1 :(得分:2)

您可以在索引中添加总值&#34; i&#34;到arr索引&#34;我&#34;。 但arr与总数的指数不同。

所以你需要这样做:

&#13;
&#13;
<a href="javascript: window.open('', '_self', '').close();">Close Tab</a>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您的代码有点不对,我正在纠正它:

&#13;
&#13;
var total = [300, 350, 450, 650];
var arr = [];
for (var i = 0; i < total.length; i++) {
  if (parseInt(total[i]) >= 400) {
    arr.push(total[i]);
  }

}
alert(arr.length);
alert(arr);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

你应该有一个计数器来完成你的任务

var total = [300, 350, 450, 650];
var arr = [];
var counter=0;
for (var i = 0; i < total.length; i++) {
  if (parseInt(total[i]) >= 400) {
    arr.push(total[i]); //to save into an array
  }

}
   console.log(arr.length);

答案 4 :(得分:0)

使用ECMA6,阅读起来容易得多

var total = [300, 350, 450, 650];
var arr = total.filter(value => value >= 400);
console.log(arr.length);
console.log(arr);

,否则

var total = [300, 350, 450, 650];
var arr = [];
for (var i = 0; i < total.length; i++) {
  if (parseInt(total[i]) >= 400) {
    arr.push(total[i]);
  }

}
alert(arr.length);
alert(arr);

使用这部分代码     arr [i] = total [i]; 每次将值添加到与原始位置相同的位置。不会添加低于400的其他值,但会将其映射为空值