0

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

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

4 回答 4

3

的确,

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

arrayName[arrayName.length-1]
于 2013-09-06T12:59:10.857 回答
0

您可以使问题 1D :

myString.slice(0,-1)将删除字符串的最后一个字符,因此您不需要将字符串转换为数组。在此处查看其文档(正索引:我们从头开始计数,负索引:我们从末尾开始计数)

然后为了优雅,您应该将上面的函数映射到一维数组(这意味着您自动将该函数应用于表的每个元素并用返回值替换其值):

/* 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);
  }
);
于 2013-09-06T13:05:41.600 回答
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);
于 2013-09-08T05:48:37.860 回答
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);
于 2013-09-06T13:11:38.700 回答