我对我的代码的可行性有疑问。我确信有一种更好,更有效的方式来编写我写的函数。
这是功能:
let i;
for (i = 0; i < ns.length; i++) {
if (ns[i] > 1) {
ns[i] = 3;
const place = ns[i];
ns.splice(place + 2, 1, 4);
ns.splice(place, 1, 2);
ns.splice(place - 1, 1, 1);
}
}
初始数组(此数组的长度最多为20项):
ns = [1 , 1 , 1 , 1 , 2 , 0]
结果数组:
ns = [1 , 1 , 1 , 2 , 3 , 4]
信不信由你,但这符合我的需要。但是,有没有比只加三次拼接更好的方法?如果初始数组的第二个数字在结尾或开始,它也会扩展我的数组。我知道我可以将它包装在另一个条件中,但这对我来说似乎很笨拙。
提前致谢! 问候
您可以使用删除单个值替换拼接,并在索引处添加单个值并使用简单的assingment。
为了防止在非给定索引处更新值,您可以使用一个函数来检查所需索引并仅更新给定索引。
function update(array, index, value) {
if (index >= 0 && index < array.length) {
array[index] = value;
}
}
var ns = [1, 1, 1, 1, 2, 0],
length = ns.length,
i,
place = 3;
for (i = 0; i < length; i++) {
if (ns[i] > 1) {
ns[i] = place;
update(ns, place - 1, 1);
update(ns, place, 2);
update(ns, place + 2, 4);
}
}
console.log(ns);
所以在Nina Scholz和朋友的帮助下,我得到了正确答案:
初始数组:
["1", "1", "1", "1", "1", "2", "0", "0"]
期望的阵列:
["1", "1", "1", "1", "2", "3", "4", "0"]
功能:
isSibling() {
const siblings = this.props.data.map(item => (
item.progress
));
let i;
const place = '3';
for (i = 0; i < siblings.length; i++) {
if (siblings[i] === '2') {
const num = i;
siblings[i] = place;
this.update(siblings, i - 1, '2');
this.update(siblings, i + 1, '4');
return siblings;
}
}
return siblings;
}
更新功能: 确保阵列不被延长或缩短:
update(array, index, value) {
if (index >= 0 && index < array.length) {
array[index] = value;
}
}
谢谢您的帮助! :d