我有这个:
map = ranks.map((row, r) => (
row.map((rank, i) => {
return [element(r, i, state, rank, toggled, onClick)];
})
));
它通过二维数组进行映射。
在每一行之后,我想插入<div class="clearfix"></div>
。
我认为,如果我能以某种方式获取每一行的最后一个索引,那么我将能够在行映射回调中使用它。有人可以告诉我该怎么做吗?
答案 0 :(得分:59)
const rowLen = row.length;
row.map((rank, i) => {
if (rowLen === i + 1) {
// last one
} else {
// not last one
}
})
答案 1 :(得分:38)
正如LeoYuan 袁力皓所回答的那样,这是正确答案,但可以稍微改进一下
map
接受带有第三个参数的函数,该参数是迭代数组本身。
row.map((rank, i, arr) => {
if (arr.length - 1 === i) {
// last one
} else {
// not last one
}
});
使用arr.length
代替row.length
是一种更好,更正确的方法,原因如下:
当您想提供显式数组时,它也会起作用。 E.g。
[1,2,3,4].map((rank, i, arr) => {
if (arr.length - 1 === i) {
// last one
} else {
// not last one
}
});
如果您想将回调移到map
范围之外(主要是为了获得更好的性能),那么使用row.length
是不对的,因为它超出了范围。例如。在OP情况下:
const mapElement = (rowIndex, state, toggled, onClick) => {
return (rank, i, arr) => {
let lastIndex = arr.length - 1;
return [element(rowIndex, i, state, rank, toggled, onClick, lastIndex)];
};
};
map = ranks.map((row, r) => row.map(mapElement(r, state, toggled, onClick)));
答案 2 :(得分:3)
接受答案略有改善:
const lastIndex = row.length - 1;
row.map((rank, i) => {
if (i === lastIndex) {
// last one
} else {
// not last one
}
})
这将从循环内部删除算术。
答案 3 :(得分:2)
更少的代码行就可以达到相同的效果
row.map((rank, i, {length}) => (
//last element
if(i + 1 === length){
}
));
答案 4 :(得分:1)
您可以用数组的长度检查最后一个索引。这是一个逻辑
var randomnumber = Math.floor(Math.random() * (100 - 10 + 1)) + 10
console.log("your last index is dynamic, ehich is ",randomnumber-1);
let arry = [];
for (i=1;i<randomnumber;i++){
arry.push(i)
}
arry.map((data,index)=>{
if(index == arry.length-1 ){
console.log("last index data ",data)
}
else{
console.log("remain data ",data)
}
})
console.log("your last index is dynamic, which is ",randomnumber-1);
的一种过于简单的技术
答案 5 :(得分:1)
简化上面的答案
const array = ['apple','orange','banana'];
array.map((element, index) => (index === array.length - 1) ? \`${element}.\` : \`${element},\`);
答案 6 :(得分:0)
config.action_controller.include_all_helpers = false
将返回 =IF(ROUNDUP(N38/N37,0)>N17,ROUNDDown(N38/N37,0),RoundUp(N38/N37,0))
答案 7 :(得分:0)
一种更简单的方法是将.map与三元运算符结合使用,
const positions = ["first", "second", "third", "fourth"]
positions.map((x, index, array) => {
index === array.length -1
? console.log("this is the last item in the array")
: console.log( x)
}
/////////////说明
x ###返回当前元素.map循环遍历
index ###返回当前元素的索引(项目在数组中的位置)。
array ###返回相同的元素,因此如果我们使用sth这样的话
["first", "second", "third", "fourth"].map...
我们仍将获得要遍历的数组
array.length-1 ###给出了数组的长度,-1给出了数组中最后一个元素的索引
请帮忙投票,如果需要更多说明,请发表评论
答案 8 :(得分:0)
访问 length
中的 array.map()
属性的最简洁的方法(虽然有点“脏”——你可能会得到一些 ESLint 错误,TypeScript 也可能对此不满意)是拉它(通过解构)第三个回调参数(这是我们正在映射的数组),然后分配一个新属性 e。 G。 lastIndex
,哪个值是从之前提取的 length
中派生出来的:
let list = ["Alice", "Bob", "Cedrick", "David", "Emily"]
let mapped = list.map((item, i, {length, lastIndex = length - 1}) => {
return i === lastIndex ? "lastitem: " + item : item
})
console.log(mapped)