Javascript中的函数和对象

时间:2017-04-05 21:41:25

标签: javascript arrays object

编写一个函数'transformFirstAndLast',它接受一个数组,并返回一个对象: 1)数组的第一个元素作为对象的键,和 2)数组的最后一个元素作为该键的值。

示例输入: ['女王','伊丽莎白','心中','碧昂丝'],

函数的返回值(输出): {   女王:'碧昂丝' } 请注意,输入数组可能具有不同数量的元素。您的代码应灵活适应。

E.g。它应该处理如下输入: ['Kevin','Bacon','Love','Hart','Costner','Spacey']

这是我写的代码:

function transformFirstAndLast(array) {
  var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
  var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey']
  var myObject = {};
      key = arrayList.shift();
      value = arrayList.pop();
      myObject[key] = value
  var myObj2 = {};
      key = arrayList2.shift();
      value = arrayList2.pop();
      myObj2[key] = value;
  console.log(myObject);
  console.log(myObj2);
}
transformFirstAndLast();

输出是这样的:

{ Queen: 'Beyonce' }
{ Kevin: 'Spacey' }
=> undefined

我知道我应该有一个return语句,但我不能在一个函数中使用两个数组用于2个对象,不管怎样,我不知道我是完全错了还是我非常接近找到解决方案,但有人可以解释为什么我在输出屏幕的第三行得到“未定义”的消息?谢谢!

3 个答案:

答案 0 :(得分:3)

只需使用数组索引获取值并创建对象。



function transformFirstAndLast(array) {

  var myObject = {};
    myObject[array[0]] = array[array.length-1];
    return myObject;
}

  var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
  var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey']
  
  console.log(transformFirstAndLast(arrayList));
  console.log(transformFirstAndLast(arrayList2));




答案 1 :(得分:1)

实现所需结果的最简单方法是创建一个空对象,并将给定数组的第一个元素指定为key,将数组中的最后一个元素指定为value

var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'],
    arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey'];
 

function transformFirstAndLast(array) {
  var res = Object.create(null);
      res[array[0]] = array[array.length-1];
      console.log(res);
      return res;
}

transformFirstAndLast(arrayList);
transformFirstAndLast(arrayList2);

答案 2 :(得分:0)

  

任何人都可以解释为什么我会得到这个" undefined"输出屏幕第三行的消息?

输出的原因是:

{ Queen: 'Beyonce' }
{ Kevin: 'Spacey' }
=> undefined

是因为你的函数transformFirstAndLast没有return语句,但函数必须总是返回一些东西,因此返回undefined

function transformFirstAndLast(array) {
  var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
  var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey']
  var myObject = {};
  key = arrayList.shift();
  value = arrayList.pop();
  myObject[key] = value
  var myObj2 = {};
  key = arrayList2.shift();
  value = arrayList2.pop();
  myObj2[key] = value;
  console.log(myObject);        <-- first output
  console.log(myObj2);          <-- second output
}
transformFirstAndLast();        <-- third output

第三个​​输出正在调用该函数,但也返回一个值。如果您只有1;,则会输出1

你可以通过以下方式解决这个问题:

  1. 利用逗号运算符做其他事情;例如,transformFirstAndLast(), 'done';
  2. 在函数return true中添加一个return语句;理想情况下,您希望返回对象return myObject;
  3. 实施例

    这是一个更强大的示例,说明如何将数组,多个数组甚至一串字符串作为函数的参数并返回创建的对象。

    &#13;
    &#13;
    "use strict";
    
    var arrayList = ['Queen', 'Elizabeth', 'Of Hearts', 'Beyonce'];
    var arrayList2 = ['Kevin', 'Bacon', 'Love', 'Hart', 'Costner', 'Spacey'];
    
    console.log(
      'Example 1 (passing arrays):\n',
      transformFirstAndLast(arrayList, arrayList2)
    );
    console.log(
      'Example 2 (passing strings):\n',
      transformFirstAndLast('thank','you','mother')
    );
    
    
    function transformFirstAndLast() {
      var obj = {}, arrs = [];
       
      if (!Array.isArray(arguments[0]))
        // handle a bunch of strings (Example 2)
        arrs = [Object.keys(arguments).map(k=>arguments[k])];
      else
        // handle 1 or more array
        arrs = [...arguments];
      
      arrs.forEach( arr => {
        obj[arr[0]] = arr[arr.length-1];
      });
      
      return obj;
    }
    &#13;
    &#13;
    &#13;