从2d数组javascript中提取最后的元素

时间:2013-09-06 12:55:36

标签: javascript arrays

好的,我正在尝试用JavaScript创建一个非常基本的机器翻译程序作为学习项目。我正在将句子分成2D数组......

function string2TwoD(sentence){
    var periodless = sentence.replace(/^[.\s]+|[.\s]+$/g, "");
    var splitSen = periodless.split(" ");
    splitArray = [];
    var i;
    for (i = 0; i < splitSen.length; i++){
        splitArray[i] = splitSen[i].split("");
    }
    return splitArray;
}

现在我正在尝试从每个二级数组中提取最后一个字母并将它们粘贴到我可以在以后使用的另一个数组中。 到目前为止,我唯一想到的就是......

var workWith = sting2TwoD("This here is a sentence boy.");
var completeSen = string2TwoD("This here is a sentence boy.");
var i;
var popped = [];
    for (i = 0; i < workwith.length; i++){
        popped += workwith[i].pop();
    }
var poppedArray = popped.split("");
console.log(poppedArray);
console.log(completeSen);

这对我来说似乎是一个糟糕的解决方案,因为我被迫创建原始数组的第二个副本,只是为了保持我的string2TwoD函数的原始值。必须有更好的方法来访问第二级数组的结束值(在很多情况下,我将需要数组的最后两个元素,因为我实际上试图提取形容词结尾(这将是从德语翻译成英语)) 。我已尝试使用多个for循环,但我似乎无法得到它来提取正确的值。有什么建议?原谅我,我是诺布。

4 个答案:

答案 0 :(得分:3)

确实,

您可以使用以下命令访问任何JS数组的最后一个值:

arrayName[arrayName.length-1]

答案 1 :(得分:0)

你可以解决问题1D:

myString.slice(0,-1)将删除字符串的最后一个字符,因此您无需将字符串转换为数组。请参阅其文档here(正面指数:我们从头开始计算,负面指数:我们从结束算起)

然后要优雅,你应该将上面的函数映射到1D数组(这意味着你自动将函数应用于表的每个元素并用返回的值替换它的值):

/* STEP 1: standardization, on some web browsers the array.prototype.map function may not exist */
if (!Array.prototype.map)
{
  Array.prototype.map = function(fun /*, thisp*/)
  {
    var len = this.length;
    if (typeof fun != "function")
      throw new TypeError();

    var res = new Array(len);
    var thisp = arguments[1];
    for (var i = 0; i < len; i++)
    {
      if (i in this)
        res[i] = fun.call(thisp, this[i], i, this);
    }

    return res;
  };
}

/* STEP 2 */
splitSen.map(
  function(element)
  {
    element.slice(0,-1);
  }
);

答案 2 :(得分:0)

获取workWith数组并将最后一个元素推送到新数组。

var arr = [];
for (var i = 0, l = workWith.length; i < l; i++) {
  arr.push(workWith[i][workWith[i].length - 1]);
}
console.log(arr);

答案 3 :(得分:0)

您无需workWith即可实现此目标:

var item;
var lastChars = [];
var completeSen = string2TwoD("This here is a sentence boy.");
for (var i = 0, l = completeSen.length; i < l; i++) {
    item = completeSen[i];
    lastChars.push(item[item.length - 1]);
}
console.log(lastChars);
console.log(completeSen);