indexOf、includes、filter、for..in、for..of、forEach的用法

1、indexOf

定义:ES5中在数组中查找是否包含目标元素,有返回1,无返回-1

不足:第一个是它会返回-1和元素的位置来表示是否包含,在定位方面是没问题,就是不够语义化。另一个问题是不能判断是否有NaN的元素。

2、includes

ES6新增 array.includes() 方法:通过判断是否包含某一元素,返回true或fasle.

解决了上面indexOf两个缺点,但是不能定位。

3、filter

 定义:此方法用来迭代*一个数组,按给出的条件过滤出符合的元素,返回一个新数组。

***迭代:对计算机特定程序中需要反复执行的子程序(一组指令),进行一次重复,即重复执行程序中的循环,直到满足某条件为止,亦称为迭代。

使用方法:用 filter() 定义一个新数组,给他传入一个回调函数,里面带参数(例如:val),利用条件,true的保留在新数组,false的过滤。

4、for..in

是ES3的语法:结果是索引下标,可循环遍历对象,数组(一般不建议)。

 

5、for..of

ES6新增数组方法,只能循环遍历数组,返回值为数组元素。

 

6、forEach

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
协同过滤算法是推荐系统中常用的算法之一,而Node.js也可以实现协同过滤算法。下面是一个简单的实现过程: 1.首先,需要安装Node.js和相关的包,例如mathjs和csv-parse。可以使用以下命令进行安装: ```shell npm install mathjs csv-parse ``` 2.接下来,需要读取数据集并将其转换为矩阵。可以使用csv-parse包来读取CSV文件,并使用mathjs包来创建矩阵。以下是一个示例代码: ```javascript const parse = require('csv-parse'); const math = require('mathjs'); // 读取CSV文件 const csvData = 'user,item,rating\n1,101,5\n1,102,3\n2,101,2\n2,102,5\n3,101,5\n3,102,2'; parse(csvData, {columns: true}, (err, data) => { if (err) { console.error(err); return; } // 将数据转换为矩阵 const users = math.unique(data.map(d => d.user)).sort(); const items = math.unique(data.map(d => d.item)).sort(); const ratings = math.zeros(users.length, items.length); data.forEach(d => { const i = items.indexOf(d.item); const j = users.indexOf(d.user); ratings.set([j, i], parseInt(d.rating)); }); }); ``` 3.然后,需要计算用户之间的相似度。可以使用余弦相似度来计算用户之间的相似度。以下是一个示例代码: ```javascript // 计算用户之间的相似度 const similarities = math.zeros(users.length, users.length); for (let i = 0; i < users.length; i++) { for (let j = i + 1; j < users.length; j++) { const ri = ratings.subset(math.index(i, math.range(0, items.length))); const rj = ratings.subset(math.index(j, math.range(0, items.length))); const numerator = math.sum(math.dotMultiply(ri, rj)); const denominator = math.sqrt(math.sum(math.square(ri))) * math.sqrt(math.sum(math.square(rj))); similarities.set([i, j], numerator / denominator); similarities.set([j, i], numerator / denominator); } } ``` 4.最后,需要预测用户对未评分物品的评分。可以使用加权平均数来预测用户对未评分物品的评分。以下是一个示例代码: ```javascript // 预测用户对未评分物品的评分 const userIndex = users.indexOf(1); const itemIndex = items.indexOf(103); const unratedItems = ratings.subset(math.index(userIndex, math.range(0, items.length))).toArray().map((r, i) => r === 0 ? i : -1).filter(i => i !== -1); const similaritiesToUser = similarities.subset(math.index(math.range(0, users.length), userIndex)); const similaritiesToUserFiltered = similaritiesToUser.toArray().map((s, i) => unratedItems.includes(i) ? s : 0); const ratingsOfSimilarUsers = ratings.subset(math.index(math.range(0, users.length), math.index(unratedItems, math.range(0, items.length)))); const weightedRatingsOfSimilarUsers = math.dotMultiply(ratingsOfSimilarUsers, similaritiesToUserFiltered).toArray().map(r => math.sum(r)).map((r, i) => r / math.sum(similaritiesToUserFiltered.toArray().map((s, j) => s * (ratingsOfSimilarUsers.subset(math.index(j, i)) !== 0 ? 1 : 0)))); const predictedRating = math.sum(weightedRatingsOfSimilarUsers) / math.sum(similaritiesToUserFiltered); console.log(predictedRating); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值