我收到了错误的输出,我在数组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);
,但输出错误。
>>> 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;
答案 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与总数的指数不同。
所以你需要这样做:
<a href="javascript: window.open('', '_self', '').close();">Close Tab</a>
&#13;
答案 2 :(得分:0)
您的代码有点不对,我正在纠正它:
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;
答案 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的其他值,但会将其映射为空值