从JSON中删除对象而不留下未定义的对象

时间:2017-06-28 21:42:07

标签: javascript json node.js

我正在开发一个涉及使用预加载数据的项目。 这部分的目标是从json中删除一个对象:

function cclever_show_insurance_step_if_rentals() {
    if ( function_exists( 'wc_checkout_add_ons' ) ) {
        // set to false first
        $cat_check = false;

        // check each cart item for our category
        foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {

            $product = $cart_item['data'];

            // replace 'rentals' with your category's slug
            if ( has_term( 'rentals', 'product_cat', $product->id ) ) {
                $cat_check = true;
                // we only need one "true" to leave
                break;
            }
        }

        // if a product in the cart is in our category, remove the add-ons
        if ( $cat_check ) {

            add_action('woocommerce_multistep_checkout_before_order_info', 'cclever_add_insurance_custom_step');
            function cclever_add_insurance_custom_step( $checkout ) {
              wc_get_template( 'checkout/insurance.php', array( 'checkout' => $checkout ) );
            }
        }
    }
}
add_action( 'woocommerce_before_checkout_form', 'cclever_show_insurance_step_if_rentals' );

我通常会从中删除一个对象:

   var obj = {'objectName0':[object0, object1, object], 'objectName1':[object, object, object], 'objectName2':[object, object, object]}

但问题是我稍后会在使用

时循环播放它
delete obj[Object.keys(obj)[i]];

并且我们都知道这会返回“未定义”。

另外我要注意的是,当我试图删除这个对象时,我不知道它的名字,这就是我使用Object.keys();

的原因

2 个答案:

答案 0 :(得分:0)

将对象视为不可变对象并创建一个新对象,删除要删除的键而不是将其变异。您可以使用下划线的_.omit()。或者做一个等效的辅助函数。

答案 1 :(得分:0)

我建议创建一个新对象,但不要在复制整个对象时复制该对象。例如,假设你有对象,

var obj = {
  object1: {...},
  object2: {...},
  object3: {...}
};

您想要删除object2。只需循环说,

var new_obj = {};
for (var i in obj) {
  if (i != object2) {
    new_obj.i = obj.i;
  }
}