繁体   English   中英

在包含连续数字的数组中查找未知数 javascript

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM