2017-05-02 8 views
0
私はこのコードを持っている

JSオブジェクトを返す関数として.replace()の2番目のパラメータを取得していますか?

function itemFormatter(match, p1, p2, p3, p4, p5, offset, string){ 
    var lineItem = { 
     id: p3 ? p3 : p5, 
     type: p1 ? p1 : p4, 
     dualCheck: p2 ? true : false 
    }; 
    console.log(lineItem); 
    return lineItem; 
} 
var item = $(this).prop('id').replace(/(clItem[YNA]{1,})(DC)(\d{1,3})|(clItem[YNA]{1,})(\d{1,3})/g, itemFormatter); 
console.log(item.id); 

目的は、IDから作成したjsオブジェクトをjQのオブジェクトのIDを取得して返すことです。しかし、itemFormatter()内のログは実際のオブジェクトをデータでログに記録し、項目変数の下にあるログは[object Object]を返し、undefinedをログするとitem.idのようにログに記録します。

lineItemが正しく返されるように、または私が期待しているデータをどのように返すのですか?


$(document).on('click', '.clItemCB', function(){ 
 
    function itemFormatter(match, p1, p2, p3, p4, p5, offset, string){ 
 
    var lineItem = { 
 
     id: p3 ? p3 : p5, 
 
     type: p1 ? p1 : p4, 
 
     dualCheck: p2 ? true : false 
 
    }; 
 
    console.log(lineItem); 
 
    return lineItem; 
 
    } 
 
    var item = $(this).prop('id').replace(/(clItem[YNA]{1,})(DC)(\d{1,3})|(clItem[YNA]{1,})(\d{1,3})/g, itemFormatter); 
 
    console.log(item); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<button id="clItemYDC253" class="clItemCB">Click Me!</button>

+0

何をやっていることは本当に意味がありません。 '.replace()'の振る舞いは返された値を使って一致したコンテンツを置き換えるため、 '.replace()'に渡される関数のコールバックからの戻り値はオブジェクトではなく**文字列**でなければなりません正規表現にマッチする)。 – Pointy

+0

あなたができること(私が目標を理解しているとわからない場合)は、コールバックが*コールバックの外に宣言された変数の値を設定することです。 – Pointy

+0

あなたは文字列をアイテムに格納するので、 '$(this)'への魔法の言及ではなく、文字列を置き換えるときには要素のプロパティを更新しません。 – epascarello

答えて

0
function itemFormatter(match, p1, p2, p3, p4, p5, offset, string){ 
    var id = p3 ? p3 : p5, 
     type = p1 ? p1 : p4, 
     dualCheck = p2 ? true : false; 
    // console.log(lineItem); 
    return [id, type, dualCheck].join('-'); 
    } 
    var item = $(this).prop('id').replace(/(clItem[YNA]{1,})(DC)(\d{1,3})|(clItem[YNA]{1,})(\d{1,3})/g, itemFormatter).split('-'); 
    console.log(item); 

だから、これは代わりに、(置き換えるからオブジェクトを返すようにしようと、私は解決策として思い付いたものです)、再フォーマットを含む文字列を返します情報をハイフンで区切り、split()を変数宣言に連結します。これにより、文字列を配列aに分割し、索引によって情報にアクセスできるようにします。オブジェクトを返すことによって達成しようとしていた機能に似ています。


$(document).on('click', '.clItemCB', function(){ 
 
     function itemFormatter(match, p1, p2, p3, p4, p5, offset, string){ 
 
     var id = p3 ? p3 : p5, 
 
      type = p1 ? p1 : p4, 
 
      dualCheck = p2 ? true : false; 
 
     // console.log(lineItem); 
 
     return [id, type, dualCheck].join('-'); 
 
    } 
 
    var item = $(this).prop('id').replace(/(clItem[YNA]{1,})(DC)(\d{1,3})|(clItem[YNA]{1,})(\d{1,3})/g, itemFormatter).split('-'); 
 
    console.log(item[0]+' I am the ID') 
 
    console.log(item[1]+' I am the Type') 
 
    console.log(item[2]+' I am for duplicate checking'); 
 

 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 

 
<button id="clItemYDC253" class="clItemCB">Click Me!</button>

関連する問題