从 2 个得分最高的节点列表中获取 3 个节点(我自己设置的属性)
Get 3 nodes from 2 NodeLists which have the biggest scores (an attribute that I have put myself)
我有两个节点列表,一个是<a>
元素,另一个是<img>
元素。这些节点列表的大小不同。
我为每个节点添加了一个称为 score 的属性。现在我有一种方法可以做到这一点:
getImageWithBiggestScore: function(images,anchor_images) {
var best_scored_image = images[0];
for (var i = 1; i < images.length; i++) {
if (images[i].score > best_scored_image.score) {
best_scored_image = images[i];
}
}
for (var i = 0; i < anchor_images.length; i++) {
if (anchor_images[i].score > best_scored_image.score) {
best_scored_image = anchor_images[i];
}
}
return best_scored_image;
},
这将返回得分最高的节点。 但是,我想获得 3 个节点(或 5,6...理想情况下,它将是函数的参数)具有最高分数。我该怎么做?
如果我
做对了,你可以执行以下操作......
.HTML
<ul id='x'>
<li data-score='1'></li>
<li data-score='44'></li>
<li data-score='2'></li>
<li data-score='10'></li>
</ul>
<ul id='y'>
<li data-score='9'></li>
<li data-score='1'></li>
<li data-score='1'></li>
<li data-score='3'></li>
</ul>
爪哇语
var x = Array.prototype.slice.call(document.getElementById('x').children), // images
y = Array.prototype.slice.call(document.getElementById('y').children), // anchor_images
z = [], // array that will keep the results
param = 4, // number of nodes as a parameter
sortFunc = function(a, b) {
if(typeof a === 'object' && typeof b === 'object')
return (b.getAttribute('data-score') * 1) - (a.getAttribute('data-score') * 1);
}; // sort desc
x.sort(sortFunc); // order the first array desc
y.sort(sortFunc); // order the second array desc
// push into z the highest values of each array
for(var i = 0; i < param; i++) {
z.push(x[i]);
z.push(y[i]);
}
// now, z contains the combination of the highest values from x and y
z.sort(sortFunc); // sort desc the new array
z = z.splice(0, param); // get the result :)
var result = "";
for(var i = 0; i < z.length; i++) {
result += z[i].getAttribute('data-score') + ",";
}
document.getElementById('result').innerHTML = result;
您可能需要进行调整才能使其与特定于您的代码的内容一起工作......操作中的代码:http://jsfiddle.net/YHjgY/5/
我可能会在这里使用递归
递归函数是这样的
var arrObjs = new Array();
arrObjs.push("a elements arr obj"); // pushes the complete array of a elements to the first index of arrObjs
arrObjs.push("div elements arr obj"); //
var value = run(0,0);
function run (index,biggestScore){
var arr = new Arrray();
var smallestLength = 999; // could probably write this a better way. Assuming the length would not be more than 999 length
for(var i=0; i < arrObjs.length;i++){
if(arrObjs[i].length >= index){
if((arrObjs[i].length-index) < smallestLength){
smallestLength = arrObjs[i].length
}
arr.push(arrObjs[i]);
}
}
for(var j=0; j < arr.length;j++){
for(var k=index; k<arr[j].length;k++){
if(arr[j][k].score>biggestScore){
biggestScore.score = arr[j][k];
}
}
}
biggestScore = run(smallestLength,biggestScore);
return biggestScore;
}
可能会有一些错误。没有测试它;我想你明白它背后的基本思想。如果您有任何问题,请告诉我:)
相关文章:
- 按我自己的类克隆另一个元素的内容和顺序
- 如何配置分析以将数据发送到我自己的服务器
- gcloud节点-我如何确保通过签名URL上传到谷歌云存储的文件是公开可读的
- 从我自己的脚本中包含的Javascript文件中调用一个函数
- 让我自己的过滤器不工作
- 制作我自己的加密/解密系统
- "npm运行构建:css"不能工作,而当我自己运行脚本时是可以的
- 绕过我自己计算机上的浏览器安全限制
- 如何将我自己的按钮连接到下载库
- Javascript如何设置我自己的img宽度和高度(调整大小)
- 如何在Facebook上分享我自己的网站与网站上的图像
- 如何将 screen.width 值替换为我自己定义的值
- 谷歌地图api:如何将我自己的标记添加到地图
- 需要创建一个函数,将我自己创建的范围对象转换为字符串
- 可以用我自己的自定义图像替换光标
- 谷歌地图API:在JavaScript API中使用我自己的coords
- 正在创建(我自己的)TypeScript库
- 从 2 个得分最高的节点列表中获取 3 个节点(我自己设置的属性)
- 如何创建我自己的类的实例,但使其行为像节点
- JavaScript在页面上运行,但最后删除了自己的DOM节点.我该如何测试它做了什么