js计算1-10000中出现的0 的次数(涉及到map,fill,filter,test,reduce方法)

本文介绍了一段JS代码,该代码用于计算从1到10000的数字中0出现的总次数,通过使用fill(), filter(), test()和reduce()等方法,实现了一个高效的数据筛选和计数过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

js计算1-10000中出现的0 的次数

new Array(10000).fill('').map((_, index) => index + 1).filter(item => /0/.test(item)).reduce((count, item) => { return count + (String(item).match(/0/g) || []).length}, 0)
  • 详解:
    1..fill()方法:es语法,填充数组
    • 用法:
arr.fill(value, start, end)
value:填充值。
start:填充起始位置,可以省略。
end:填充结束位置,可以省略,实际结束位置是end-1。
例子:
const arr3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
arr3.fill(7, 2, 5)
console.log('%s', arr3)
结果:
1,2,7,7,7,6,7,8,9,10,11

所以 new Array(10000).fill('').map((_, index) => index + 1)实现了创建一个1-10000的数组集合

  1. .filter()方法:es6语法, 过滤数组
    例子1: 创建一个数组,判断数组中是否存在某个值
var newarr = [
  { num: 1, val: 'ceshi', flag: 'aa' },
  { num: 2, val: 'ceshi2', flag: 'aa2'  }
]
console.log(newarr.filter(item => item.num===2 ))

例子2: 去掉空数组空字符串、undefined、null

var arr = ['1','2',undefined, '3.jpg',undefined]
var newArr = arr.filter(item => item)
console.log(newArr)

例子三: 去掉数组中不符合项

var arr = [20,30,50, 96,50]
var newArr = arr.filter(item => item>40)  
console.log(newArr)

例子四:过滤不符合项

var arr = ['10','12','23','44','42']
var newArr = arr.filter(item => item.indexOf('2')<0) 
console.log(newArr)

例子五: 数组去重

var arr = [1, 2, 2, 3, 4, 5, 5, 6, 7, 7,8,8,0,8,6,3,4,56,2];
var arr2 = arr.filter((x, index,self)=>self.indexOf(x)===index)  
console.log(arr2); //[1, 2, 3, 4, 5, 6, 7, 8, 0, 56]

所以new Array(10000).fill('').map((_, index) => index + 1).filter(item => /0/.test(item)))筛选出了所有带0的数字
3. .test() 方法: 用于检测一个字符串是否匹配某个模式,返回true或false.

var str = "Visit W3School";
var patt1 = new RegExp("W3School");
var result = patt1.test(str);
document.write("Result: " + result);
//输出: Result: true
  1. .reduce() 归并方法(累加器)
    用法: reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initiaValue)。
    假设函数有个传入参数,prev和next,index和array。 Prev和next是你必须要了解的。
    当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。
    但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素

例子1: 计算数组总和

var num = [1,2,3,4,5];
var res = num.reduce(function(total,num){
    return total+num;
    //return total + Math.round(num);//对数组元素四舍五入并计算总和
});
console.log(res);//15

例子2: 合并二维数组

var red = [[0, 1], [2, 3], [4, 5]].reduce(function(a, b) {
 return a.concat(b);
}, []);  //[]这个为初始值
console.log(red)
结果: [0, 1, 2, 3, 4, 5]
import org.apache.spark.sql.{DataFrame, SparkSession} import org.apache.spark.sql.functions._ import org.apache.spark.ml.feature.VectorAssembler import org.apache.spark.ml.stat.Correlation import org.apache.spark.sql.types.DataTypes import org.apache.spark.ml.linalg.{Matrix, DenseMatrix} import scala.collection.JavaConverters._ // 引入 Scala 集合到 Java 集合的转换工具 object SparkCorrelationAnalysis { def main(args: Array[String]): Unit = { val conf = new org.apache.spark.SparkConf() .setAppName("SparkCorrelationAnalysis") .setMaster("local[*]") .set("spark.driver.allowMultipleContexts", "true") // 添加这个配置 val spark = SparkSession.builder() .config(conf) .getOrCreate() import spark.implicits._ try { val dataPath = "D:/OneDrive/桌面/crop.csv" val df: DataFrame = spark.read .option("header", "true") .option("inferSchema", "true") .csv(dataPath) .withColumn("Value", col("Value").cast(DataTypes.DoubleType)) val processedDF: DataFrame = preprocessData(df) processedDF.show(5, false) // 收集所有唯一的产品项到驱动程序 val products = processedDF.select("Item").distinct().collect().map(_.getString(0)) // 对每个产品并行处理 products.par.foreach { product => val productDF: DataFrame = processedDF.filter($"Item" === product) if (productDF.count() > 1) { val correlationDF = calculateCorrelation(spark, productDF) correlationDF.show(false) } else { println(s"Not enough data for product: $product") } } } catch { case e: Exception => e.printStackTrace() println(s"Error occurred: ${e.getMessage}") } finally { spark.stop() } } private def preprocessData(df: DataFrame): DataFrame = { df .filter(col("Element").isin("Production", "Export Quantity")) .groupBy("Year", "Item", "Element") .agg(sum("Value").alias("TotalValue")) .groupBy("Year", "Item") .pivot("Element", Seq("Production", "Export Quantity")) .agg(first("TotalValue")) .withColumnRenamed("Export Quantity", "Export") .na.fill(0.0) } private def calculateCorrelation(spark: SparkSession, df: DataFrame): DataFrame = { try { // 确保DataFrame包含所需的列 val requiredColumns = Seq("Production", "Export") if (!requiredColumns.forall(df.columns.contains)) { return spark.createDataFrame(Seq( ("Error", "Missing columns", "Missing columns") )).toDF("指标", "与生产相关性", "与出口相关性") } import spark.implicits._ // 在worker节点上执行相关计算 df.sparkSession.sparkContext.runJob(df.rdd, (iter: Iterator[org.apache.spark.sql.Row]) => { // 将RDD行转换为Java列表 val javaRows = iter.toSeq.asJava // 将 Scala Seq 转换为 Java List // 使用 Java 列表创建 DataFrame val localDF = df.sparkSession.createDataFrame(javaRows, df.schema) val assembler = new VectorAssembler() .setInputCols(Array("Production", "Export")) .setOutputCol("features") .setHandleInvalid("skip") val vectorDF = assembler.transform(localDF) val corrMatrix = Correlation.corr(vectorDF, "features").head().getAs[Matrix](0) Seq( ("Production", corrMatrix.apply(0, 1).toString, corrMatrix.apply(0, 1).toString), ("Export", corrMatrix.apply(1, 0).toString, corrMatrix.apply(1, 0).toString) ).toDF("指标", "与生产相关性", "与出口相关性") }) .head // 返回第一个结果 } catch { case e: Exception => println(s"Error calculating correlation: ${e.getMessage}") spark.createDataFrame(Seq( ("Error", e.getMessage, e.getMessage) )).toDF("指标", "与生产相关性", "与出口相关性") } } }Error calculating correlation: Task not serializable Error calculating correlation: Task not serializable Error calculating correlation: Task not serializable Error calculating correlation: Task not serializable +-----+---------------------+---------------------+ |指标 |与生产相关性 |与出口相关性 | +-----+---------------------+---------------------+ |Error|Task not serializable|Task not serializable| +-----+---------------------+---------------------+ +-----+---------------------+---------------------+ |指标 |与生产相关性 |与出口相关性 | +-----+---------------------+---------------------+ |Error|Task not serializable|Task not serializable| +-----+---------------------+---------------------+ +-----+---------------------+---------------------+ |指标 |与生产相关性 |与出口相关性 | +-----+---------------------+---------------------+ |Error|Task not serializable|Task not serializable| +-----+---------------------+---------------------+ +-----+---------------------+---------------------+ |指标 |与生产相关性 |与出口相关性 | +-----+---------------------+---------------------+ |Error|Task not serializable|Task not serializable| +-----+---------------------+---------------------+ Process finished with exit code 0 改一下代码
06-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值