看了一个大佬有赞的面试题后,试试做了其中一道笔试题。

292 阅读1分钟
function getValue(target, valuePath, defaultValue) {
  var arrStr = valuePath.split(".");
  var finValue = null;
  if(Object.prototype.toString.call(target) === "[object Object]"){
    for (i of arrStr){
      if(/[A-Za-z]\[0\]/.test(i)){
        var arrA = i.substr(0,1)
        finValue = target[arrA][0]
      }else if(/[/d]/.test(i)){
        finValue = finValue[0];
      }else{
        finValue = finValue[i];
      }
    }
  }
  if(Object.prototype.toString.call(target) === "[object Array]"){
    for (n of arrStr){
      if(/[A-Za-z]\[0\]/.test(n)){
        var arrA = n.substr(0,1)
        finValue = finValue[arrA][0]
      }else if(/[0]/.test(n) && finValue != undefined){
        finValue = finValue[0];
      }
      else if(/[0]/.test(n) && finValue == undefined){
        finValue = target[0];
    }else{
        finValue = finValue[n];
      }
    }
  }
  
  if( finValue == undefined){
    return defaultValue
  }else{
    return finValue
  }
}
var object = { a: [{ b: { c: 3 } }] }; // path: 'a[0].b.c'
var array = [{ a: { b: [1] } }]; // path: '[0].a.b[0]'
console.log(getValue(object, "a[0].b.c", 0)); // 输出3
console.log(getValue(array, "[0].a.b[0]", 12)); // 输出 1
console.log(getValue(array, "[0].a.b[0].c", 12)); // 输出 12

上面为代码正文。

下面为思路代码。

// for (const [key, value] of Object.entries(object)) {
//   if(Object.prototype.toString.call(value) === "[object Object]"){
//     console.log(1);
//   }else{
//     console.log(2);
//   }
// }
// console.log("a[0].b.c".split("."));
var arrStr = "a[0].b.c".split(".")
var patt1 = new RegExp("[0]");
// var patt2 = new RegExp(/w)
// for (i of arrStr) {
//   if(/[A-Za-z]\[0\]/.test(i)){                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
//     console.log(i.substr(0,1),i.substr(1,3)); //a [0],思路就是用for去循环把值一个一个跳出来
//   }
// }
// console.log(object['a'][0]['b']['c']);

(如果有人看到可以试试再精简一些)

小白,轻喷。