[英]Find unknown number in array of containing consecutive numbers javascript
我有一个这样的数组;
var specialOne = 3;
var array = [{value:"special"},{value:"1"},{value:"2"},{value:"specialOne"},{value:"4"},{value:"special"}];
我需要把它转换成这个数组;
var temp = [{value:"0"},{value:"1"},{value:"2"},{value:"3"},{value:"4"},{value:"5"}];
special
应替换为适当的值。
specialOne
应替换为给定的数字。
我怎样才能做到这一点?
更多示例:
0,special,2,special,4,5 => 0,1,2,3,4,5
7,8,9,special => 7,8,9,10
special,special,10 => 8,9,10
也许这就是你所追求的
var specialOne = 3; var array1 = [{value:"special"},{value:"1"},{value:"2"},{value:"specialOne"},{value:"4"},{value:"special"}]; function addspec(specialOne){ array1.forEach((o,i)=>{ if(o.value=="specialOne")o.value = specialOne.toString() if(o.value=="special") o.value = array1[i-1]?(parseInt(array1[i-1].value)+1).toString():"0" }) } addspec(3) console.log(array1)
这可能会帮助你
var specialOne = 3; var array = [ { value: "special" }, { value: "1" }, { value: "2" }, { value: "specialOne" }, { value: "4" }, { value: "special" } ]; for (i = 0; i < array.length; i++) { if (array[i].value == 'specialOne') { array[i].value = String(specialOne); console.log(array); } else if (array[i].value == 'special') { array[i].value = String(0); array.pop() array.push( { value: String(5) } ); } }
for (let i = 0; i < array.length; i++) {
if (array[i].value === "special") array[i].value = i.toString();
if (array[i].value === "specialOne") array[i].value = specialOne.toString();
};
当您需要修改数组时,您应该首先尝试使用“for”循环。 它是最有效的,因为它不会修改数组的索引,也不会返回一个新数组(想象一下,您必须在数组中修改 10 000 个项目......)。
这里很简单,你迭代数组,如果条件匹配你修改(数组本身的)值。
像这样的东西?
var specialOne = 3; var array = [{ value: "special" }, { value: "1" }, { value: "2" }, { value: "specialOne" }, { value: "4" }, { value: "special" }]; function getValues(array) { let counterSync = 0; let backCheck = []; let inFlow = false; let backCheckOnce = false; return array.map((m, i) => { if (isNaN(parseInt(m.value))) { if (inFlow || window[m.value]) { m.value = "" + (window[m.value] || (counterSync + 1)); } else { if (i === 0) { backCheckOnce = true; } backCheck.push(m); } } else { inFlow = true; // do reverse check only once if (backCheckOnce) { backCheck.reverse().forEach((x, idx) => x.value = "" + (+m.value - 1)); backCheckOnce = false; } } counterSync = +m.value; return m; }); } console.log(getValues(array));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.